Answers:
我是操纵XML的JAXB的忠实拥护者。基本上,它提供了解决此问题的方法(我假设熟悉XML,Java数据结构和XML Schema):
使用XML是困难的。人们需要一种方法来获取XML文件-基本上是文本文件-并将其转换为某种数据结构,然后程序可以对其进行操作。
JAXB将采用您编写的XML模式,并创建一组与该模式相对应的类。JAXB实用程序将创建用于操纵该XML的数据结构的层次结构。
然后,可以使用JAXB读取XML文件,然后创建所生成类的实例-包含来自XML的数据。JAXB也做相反的事情:获取java类,并生成相应的XML。
我喜欢JAXB,因为它易于使用,并且随Java 1.6一起提供(如果使用1.5,则可以下载JAXB .jars。)它创建类层次结构的方式很直观,以我的经验,做得不错抽象出“ XML”,以便我可以专注于“数据”。
因此,回答您的问题:我希望对于小型XML文件,JAXB可能会过大。它要求您创建和维护XML模式,并使用将Java类用于数据结构的“标准教科书方法”。(主类,代表“节点”的小型内部类以及它们的巨大层次结构。)因此,对于应用程序的简单线性“首选项”列表,JAXB可能不是那么好。
但是,如果您有一个相当复杂的XML模式,并且其中包含大量数据,那么JAXB是很棒的。在我的项目中,我正在二进制(由C程序使用)和XML(以便人类可以使用和修改该数据)之间转换大量数据。最终的XML Schema是不平凡的(层次结构的许多层次,可以重复某些字段,而其他字段则不能重复),因此JAXB有助于操纵它。
这是不使用它的原因:性能会下降。编组和拆组时有很多开销。您可能还需要考虑另一个用于XML对象绑定的API,例如JiBX:http : //jibx.sourceforge.net/
我一直在工作中使用JAXB,我真的很喜欢它。对于总是在变化的复杂XML模式非常适合,特别适合于XML文件中标签的随机访问。
我讨厌皮条客,但我只是开了一个博客,而这实际上是我发布的第一件事!
在这里查看:
http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/
使用JAXB,您可以自动创建对象的XML表示形式(编组)和XML的对象表示形式(编组)。
就XML模式而言,您有两种选择:
如果您必须对定义为XML模式(xsd
)的某些外部XML规范进行编码,则JAXB非常有用。
例如,您有一个交易应用程序,您必须将交易报告给Uber Lame Trade Reporting App,而交易程序已让您ultra.xsd
继续前进。使用$JAVA_HOME/bin/xjc
编译器将XML转换为一堆Java类(例如UltraTrade
)。
然后,您只需编写一个简单的适配器层即可将您的交易对象转换为,UltraTrades
并使用JAXB
来将数据封送至Ultra-Corp。这比将交易转换为XML格式要容易得多。
崩溃的地方是Ultra-Corp实际上没有遵守他们自己的规范,而price
他们下跌的交易xsd:float
实际上应该表示为double
!
为什么我们需要JAXB? Web服务的远程组件(用Java编写)使用XML作为相互之间交换消息的手段。为什么是XML?因为XML被认为是轻量级的选项,可以在资源有限的网络上交换消息。因此,通常我们需要将这些XML文档转换为对象,反之亦然。例如:简单的Java POJO Employee可用于将Employee数据发送到远程组件(也是Java程序)。
class Employee{
String name;
String dept;
....
}
应该将该Pojo转换(Marshall)为XML文档,如下所示:
<Employee>
<Name>...</Name>
<Department>...</Department>
</Employee>
然后在远程组件处,从XML文档(Un-Marshall)回到Java对象。
什么是JAXB?
JAXB是执行编组和反编组操作的库或工具。如此简单,它使您免于头痛。
您也可以签出JIBX。它也是一个很好的xml数据绑定器,它也专门用于OTA(开放旅行联盟),并且由AXIS2服务器支持。如果您正在寻找性能和兼容性,可以查看一下:
JAXB通过默认的编组优化提供了改进的性能。JAXB定义了一个程序员API,用于在XML文档中读写Java对象,从而简化了通过Java进行XML的读写。