Java中最好的XML处理类

Aja*_*jay 8 java xml

哪个是Java中用于处理XML文档的最佳类?

Nat*_*Nat 19

这实际上取决于您想要对XML文档执行的操作以及文档的大小.

粗略地说,您可以将XML API分类为:

  • DOM API - 将整个文档加载到内存中,这会限制您可以处理的文档的大小,但是可以创建用于导航和转换的优化结构
  • 流式API - 您的应用程序必须解释低级别的解析事件(例如元素的开始,元素的结尾等),但您不受内存的限制.有两种流API - 推送和拉取.推送解析器会在您定义的对象上触发解析事件,并且该对象必须跟踪当前的解析状态,例如状态机或堆栈.拉解析器让您的应用程序从解析器中解析事件.这使得编写递归下降解析器以处理XML内容变得容易,但随后堆栈大小成为您可以处理的文档大小的限制.
  • XML Mappers - 将XML内容映射到Java对象.XML映射有两种主要方法:代码生成或反射.Code-gen映射器从XML模式生成Java类,这意味着您不必在Java代码中复制模式结构,但缺点是Java代码完全反映了模式结构.此外,大多数代码生成器都会创建一些难以使用的NOJO类,并且没有自己的行为.反射式映射器允许您编写具有丰富行为的Java类,然后定义它们如何映射到XML或从XML映射.如果您需要符合预定义的模式,则必须确保您的类和映射配置与该模式一致.

一些可用的选项是:

  • DOM API:标准库中的DOM API是标准的(显然!),因此与其他库互操作,但它们很糟糕.有几个更方便的类似DOM的API,例如XOM(我最喜欢AdamAdkin给出的相同理由)或JDOM.看看几个,然后决定您喜欢哪种API.
  • 流API:标准库包含SAX推送解析器的实现.Java的标准pull解析器是StAX.
  • 映射API:JAXB是一个JSR标准,但我更喜欢XStream,因为我可以更容易地将映射配置与映射类分开(不需要注释或XML配置),并将对象映射到其他数据格式或从其他数据格式映射.