- 浏览: 255768 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
aquarion:
非常感谢,解决了我的问题
Perspective 自定义设置扩展点 -
zheng_zhen:
好文章,进一步问您一下,请问自己实现的run/debug如何能 ...
【原创】Eclipse Launcher (Run/Debug As 菜单扩展)实现 -
salever:
mwdnjupt 写道http://www.xeclipse. ...
浅析OSGI的bundle依赖 -
mwdnjupt:
http://www.xeclipse.com/?p=1165 ...
浅析OSGI的bundle依赖 -
Tom.X:
插件化、模块化应遵循高内聚、低耦合的原则,尽量不要在各bund ...
浅析OSGI的bundle依赖
使用apche 的 betwixt,相关库为
Ø commons-beanutils.jar
Ø commons-betwixt-1.0-beta-1.jar
Ø commons-collections-3.2.1.jar
Ø commons-configuration-1.6.jar
Ø commons-digester.jar
Ø commons-lang-2.4.jar
Ø commons-logging.jar
比如解析如下XML:
<?xml version="1.0" encoding="UTF-8" ?> <class id="1" name="class one"> <students> <student name="Jime"> <score maths="80" /> </student> <student name="Abby"> <score maths="100" /> </student> </students> </class>
结构很简单,这里使用betwixt 方式进行解析。
首先封装XML 的元素信息,主要为3个类:
Class.java
public class Class { private int id; private String name; private List<Student> students = new ArrayList<Student>(); /** * Add a student. * @param student */ public void addStudent(Student student){ this.students.add(student); } /** * Remove a student. * @param student */ public void removeStudent(Student student){ this.students.remove(student); } /** * @return the id */ public int getId() { return id; } /** * @param id the id to set */ public void setId(int id) { this.id = id; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the students */ public List<Student> getStudents() { return students; } /** * @param students the students to set */ public void setStudents(List<Student> students) { this.students = students; } }
Student.java
public class Score { private int mathScore; /** * @return the mathScore */ public int getMathScore() { return mathScore; } /** * @param mathScore the mathScore to set */ public void setMathScore(int mathScore) { this.mathScore = mathScore; } }
都很简单,就不用多描述了。下面是每个类对应的XML 描述文件:
Class.betwixt:
<?xml version="1.0" encoding="UTF-8"?> <info primitiveTypes="attribute"> <element name="class"> <attribute name="id" property="id"/> <attribute name="name" property="name"/> <element name="students"> <element name="student" property="student"/> </element> <addDefaults/> </element> </info>
Student.betwixt:
<?xml version="1.0" encoding="UTF-8"?> <info primitiveTypes="attribute"> <element name="student"> <attribute name="name" property="name"/> <element name="score" property="score"/> <addDefaults/> </element> </info>
Score.betwixt:
<?xml version="1.0" encoding="UTF-8"?> <info primitiveTypes="attribute"> <element name="score"> <attribute name="maths" property="mathScore"/> <addDefaults/> </element> </info>
这些XML 文件名与类名相同,用来在XML 文件与实体类之间进行映射。具体的解析方法就很简单了。注意这些文件需要跟.java文件放到同一目录下。
public static Object fromXml(InputStream in, Class clazz) throws XmlException { BeanReader beanReader = new BeanReader(); Object object = null; try { beanReader.registerBeanClass(clazz); beanReader.getXMLIntrospector().setWrapCollectionsInElement(true); object = beanReader.parse(in); } catch (Exception e) { throw new XmlException(e); } return object; }
使用fromXml 解析文件:
public static Class parseFromXml(String path) throws Exception { FileInputStream in; Class obj = null; try { in = new FileInputStream(path); obj = (Class) XmlUtil.fromXml(in, Class.class); } catch (FileNotFoundException e) { throw new Exception(e); } catch (Exception e) { throw new Exception(e); } return obj; }
输出为XML:
public static void toXml(Object object, OutputStream out) throws Exception { try { BeanWriter beanWriter = new BeanWriter(out, "UTF-8"); beanWriter.enablePrettyPrint(); beanWriter.setIndent(" "); beanWriter.setEndOfLine(System.getProperty("line.separator")); beanWriter.writeXmlDeclaration("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); beanWriter.getXMLIntrospector().setWrapCollectionsInElement(true); beanWriter.setWriteEmptyElements(false); beanWriter.write(object); beanWriter.close(); } catch (Exception e) { throw new XmlException(e); } }
将Class 类的对象输出为XML:
public static void writeToXml(Object object, String path) throws Exception { try { FileOutputStream out = new FileOutputStream(path); XmlUtil.toXml(object, out); out.close(); } catch (FileNotFoundException e) { throw new Exception(e); } catch (IOException e) { e.printStackTrace(); } }
完成XML 解析的过程很简单,就只有几句话而以,这对于大型复杂的XML 解析很有帮助,不需要亲自处理各种属性、元素等,因为各种.jar 文件已经封装好了。
评论
5 楼
mercyblitz
2010-07-13
salever 写道
mercyblitz 写道
salever 写道
mercyblitz 写道
JAXB 不就可以吗?
没用过jaxb,刚看了下,跟这个类似,估计思路是一样的,用哪个就随自己喜好了。
某用过几次betwixt, 不管是大型的XML文件还是比较复杂的XML文件。性能和功能都还不错。
关键是读写机制,是否使用了Stream XML,对性能很有影响。
还真没用过XStream,下次有机会试试,再来跟你交流。
4 楼
salever
2010-07-13
mercyblitz 写道
salever 写道
mercyblitz 写道
JAXB 不就可以吗?
没用过jaxb,刚看了下,跟这个类似,估计思路是一样的,用哪个就随自己喜好了。
某用过几次betwixt, 不管是大型的XML文件还是比较复杂的XML文件。性能和功能都还不错。
关键是读写机制,是否使用了Stream XML,对性能很有影响。
还真没用过XStream,下次有机会试试,再来跟你交流。
3 楼
mercyblitz
2010-07-13
salever 写道
mercyblitz 写道
JAXB 不就可以吗?
没用过jaxb,刚看了下,跟这个类似,估计思路是一样的,用哪个就随自己喜好了。
某用过几次betwixt, 不管是大型的XML文件还是比较复杂的XML文件。性能和功能都还不错。
关键是读写机制,是否使用了Stream XML,对性能很有影响。
2 楼
salever
2010-07-13
mercyblitz 写道
JAXB 不就可以吗?
没用过jaxb,刚看了下,跟这个类似,估计思路是一样的,用哪个就随自己喜好了。
某用过几次betwixt, 不管是大型的XML文件还是比较复杂的XML文件。性能和功能都还不错。
1 楼
mercyblitz
2010-07-12
JAXB 不就可以吗?
发表评论
-
Java 技能树
2016-07-25 18:58 819java技能树 -
Java看书笔记
2014-08-07 17:15 730这一篇专用于一些日常的Java读书笔记 先写一点关 ... -
XStream和Jackson的使用优化
2012-12-17 11:09 0marker一下,需要研究一下这2种lib的使用方式。 -
ArrayList与LinkedList的简单比较
2012-07-27 11:07 1560本文同步发表在http://www.xeclipse.com/ ... -
java.lang.System类浅析
2012-07-25 09:58 1924本文同步发表在 http://www.xeclipse.com ... -
Linux/Unix下JFreeChart的NoClassDefFoundError问题
2012-07-04 14:51 1678最近遇到这样一个问题,使用JFreechart 1.0.13开 ... -
【转】常见的开源协议
2011-08-12 15:47 519Mozilla Public License ... -
【转】JDK发布版本时间以及代号
2011-06-20 14:02 1592已发行的版本: 版本号 名称 中文名 发布日期 ... -
最近的apache学习计划
2011-06-09 11:58 1242最近可能会要做一些apache相关的学习和开发工作,有一些pr ... -
Object类wait,notify,notifyAll的使用
2011-05-06 11:02 1475这三个方法是java的基础类Object中定义的。 w ... -
Java nio 整理整理
2011-02-25 17:17 1113看了看Java的nio类库,整理一下思路。 1,Buf ... -
Java 内存的那些事
2011-02-22 10:38 5025虽然Java屏蔽了一下内存 ... -
一些有用的Web Service 地址
2011-02-11 11:11 2221这里记录一下比较有用的Web Service 地址,可能会有用 ... -
【Java】利用HTML生成PDF之问题整理
2011-01-06 14:38 3959首先,技术为apache 的FOP ... -
【转】如何在java程序中设置文件为“隐藏”属性
2010-10-19 10:55 1636引自http://linshiquan.iteye.com/b ... -
【转】字符,字节和编码
2010-10-18 10:09 1218引言 “字符与编码” ... -
Effective Java 第2版 笔记
2010-08-18 15:45 1880Item 1;Consider static factoriy ... -
Java, 那些美妙的书籍
2010-08-10 15:39 7223整理一下最近看过或者比较有兴趣的Java书籍,以供大家参考 ... -
Object的equals()重写
2010-08-10 14:49 1576JDK1.6 API写道 public boolean e ... -
Object的equals()与hashCode()的关系
2010-08-10 14:37 0笔者在以前Java项目中使用findbugs工具时,经常遇到一 ...
相关推荐
XML(eXtensible Markup Language)是一种用于存储和交换数据的标记语言,广泛应用于软件开发、数据存储和网络通信等领域。Betwixt是Apache软件基金会的一个项目,它提供了一个简单而直观的方式来映射XML文档到Java...
在Java开发中,XML作为一种通用的数据交换格式,广泛用于存储和传输数据。为了方便地将XML文档转换为Java对象,以及将Java对象序列化为XML,Apache软件基金会提供了一个名为Betwixt的库。本篇文章将深入探讨如何使用...
Betwixt是Apache软件基金会的一个项目,提供了一种简单的方法来将XML数据映射到Java对象,以及反向操作,即将Java对象转换回XML。这个过程被称为对象-XML绑定,有助于简化数据序列化和反序列化的任务。 标题...
XML(Extensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件和文档存储等领域。在Java开发中,处理XML时,Betwixt是一个非常有用的库,它由Apache软件基金会提供,主要用于对象到XML...
总之,Betwixt提供了一种方便的方式来处理Java对象与XML之间的转换,即使在XML中存在相同节点名的情况下也能有效处理。通过配置和API的使用,开发者可以根据需要定制XML和Java Bean之间的映射规则,提高代码的可读性...
Apache Commons Betwixt是Apache软件基金会的一个项目,它为Java开发者提供了一种直观的方式来绑定Java Bean和XML。通过这个库,你可以将一个Java对象的属性和XML元素或属性对应起来,反之亦然。这样,你可以轻松地...
在Java编程领域,XML(Extensible Markup Language)作为一种数据交换和存储格式,广泛应用于系统间的数据传输和配置文件。为了方便地将Java对象与XML进行转换,开发者常常使用一些库,如XStream和Betwixt。这两个...
- **使用第三方库,如Apache Commons Betwixt**:Betwixt是Apache Commons项目的一部分,提供了一种简单的机制来映射Java对象到XML和从XML到Java对象。在提供的`commons-betwixt-0.8.jar`中,包含了Betwixt库,可以...
总的来说,Betwixt 是一个轻量级的解决方案,适合快速地在 Java beans 和 XML 之间进行简单的转换。如果你的项目只需要基础的 XML-Bean 映射功能,Betwixt 是一个不错的选择。但如果你需要更高级的功能,可能需要...
总之,Betwixt技术是Java世界中的一种XML绑定解决方案,它简化了XML数据与Java对象之间的转换过程,但随着技术的发展,其他更强大、更现代的库已经逐渐取代了它的位置。如果你在旧项目中遇到Betwixt,理解其工作原理...
XML(eXtensible Markup ...Apache Commons Betwixt提供了一种灵活且易于使用的解决方案,使得在Java中处理XML数据变得更加便捷。通过深入学习和实践,你可以更好地掌握XML到Java对象的转换技巧,提升你的开发效率。
Apache Commons Betwixt 是一个Java库,它提供了一种方式来映射XML文档到Java对象,反之亦然。这个库使得开发人员可以方便地在XML数据和Java对象之间进行转换,大大简化了数据交换和序列化的过程。"commons-betwixt-...
Apache Commons Betwixt 是一个Java库,它提供了一种简单的方式来映射对象到XML以及从XML反向映射回对象。这个库是基于Apache软件基金会的Jakarta Commons项目,旨在简化XML数据绑定任务,使得开发者可以专注于业务...
本资料用于JavaBean和XML之间相互转换,所用到的关于betwixt的包都在内。方法写在textXml中,由于默认的方法较为简单,且有局限性,所以本资料主要侧重从自定义的配置文件中转换xml或者生成javaBean.有兴趣的朋友...
Apache Commons Betwixt 是一个Java库,它...如果你在项目中需要处理大量的JavaBean到XML的转换工作,那么Betwixt是一个值得考虑的解决方案。同时,研究源代码也能加深对Java反射、XML处理和对象模型映射等技术的理解。
Apache Commons Betwixt是一个Java库,它允许开发者以一种声明式的方式将Java对象映射到XML和从XML反向映射回Java对象。这个库对于处理数据序列化和反序列化非常有用,尤其是在构建基于SOAP的Web服务时。 在"obj2...
本资料用于JavaBean和XML之间相互转换,所用到的关于betwixt的包都在内。方法写在textXml中,由于默认的方法较为简单,且有局限性,所以本资料主要侧重从自定义的配置文件中转换xml或者生成javaBean.有兴趣的朋友...
commons-betwixt-0.8.jar
1. **XML配置文件**:XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,其结构清晰,易于人类阅读和机器解析。在IT行业中,特别是Java应用,经常使用XML文件来存储配置信息,如数据库连接参数...
Betwixt是Apache软件基金会的一个开源项目,它提供了一种简单的机制来映射Java对象到XML文档,反之亦然。通过注解或者XML配置,开发者可以定义Java类和XML元素之间的映射关系,使得数据交换变得直观且易于维护。 ##...