将XML转换为Java对象的最佳实践是什么?

13

我需要将XML数据转换为Java对象。如何最佳实践地将此XML数据转换为对象?

我的想法是通过Web服务获取数据(它不使用WSDL,只使用HTTP GET查询,因此无法使用任何框架),并且答案以XML格式返回。在这种情况下,如何最佳实践处理?


还有一种无模式的方法,如果您甚至不想使用模式。http://onjava.com/pub/a/onjava/2007/09/07/schema-less-java-xml-data-binding-with-vtd-xml.html - vtd-xml-author
10个回答

12

10

看一下XStream。虽然不是最快的,但它是Java中最简单易用的转换器之一,特别适用于模型不复杂的情况。


+1个好答案,它并不是一个标准,但在我的经验中,它比JAXB更易于维护。 - maerics
2
请查看:http://bdoughan.blogspot.com/2010/10/how-does-jaxb-compare-to-xstream.html - bdoughan
这个能用来解析HTML吗?它容错性好吗?谢谢! - trillions
很可能不行(除非你的HTML是XHTML strict)。最好使用像jsoup这样的工具来解析HTML,因为它们专门设计用于此。 - mindas

4

为了一个JMS项目,我们需要将XML嵌入到TextMessages(字符串属性)中进行编组和解组(从Java转换为XML,从XML转换为Java)。我们尝试了JAXB、JibxXMLBeans。我们发现XMLBeans对我们来说效果最好。速度快、易于配置、文档详细且易于与Maven集成。


我曾经使用过JaxB、XStream和XMLBeans,它们都有好处和坏处。Jaxb是平台的一部分,XStream非常快,但如果你的XML非常复杂,XMLBeans是最好的选择。 - mezmo

3

我曾经使用过并将继续使用JDOM -> www.jdom.org


2
另一种选择是Sax解析器。它是过程式的——即访问者模式——但如果XML相当轻量级(甚至中等重量),我发现它对此非常有用。

2

JAXB API 是 Java 中内置的 API。


1
Metro实现已经捆绑在Java SE 6中。此外还有EclipseLink JAXB(MOXy)和Apache JaxMe。 - bdoughan

1

我在MQ模块中使用了JIBX,它运行得非常好。Ant配置很简单。使用Xsd2Jibx转换器从XML模式生成绑定文件和Java bean。编组和解组允许指定字符集参数。在我的项目中,这对于处理自定义字符集非常有用。但是我发现绑定编译器存在一个问题。如果Java bean具有较长的路径名,则会生成具有较长文件名的类文件,这将导致Windows XP出现问题(它具有最大文件长度限制)。

我没有使用其他API。因此,我不打算与其他API进行比较。如果您决定使用JIBX,我希望这将有所帮助。

更多详细信息,请参阅JIBX网站


0

我也使用过XStream,它易于使用且可定制。您可以添加自己的自定义转换器,这对我非常方便...


0

很惊讶更多的人没有提到Jibx。这是一个令人惊叹的库,我认为使用起来比Jaxb要简单得多。性能也非常出色!


0

对于这个问题,您也可以考虑使用Apache的Bitwixt和Simple Framework for XML。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接