正如布莱斯(Blaise)指出的那样,坚持标准。但是在此期间创建了多个标准来解决不同的问题/用例。选择哪一个完全取决于您的要求。我希望下面的比较可以帮助您选择正确的选择。
现在,您必须选择 两件事 。 API 和 API 的 实现 (有很多)
API
SAX:优点
- 基于事件
- 记忆有效
- 比DOM快
- 支持模式验证
SAX:缺点
- 没有对象模型,您必须利用事件并创建自己的
- xml的单一解析,只能向前进行
- 只读api
- 没有xpath支持
- 有点难用
DOM:优点
- 内存中对象模型
- 保留元素顺序
- 双向的
- 读写API
- xml操作
- 使用简单
- 支持模式验证
DOM:缺点
- 较大的XML文档的存储空间(通常用于小于10 mb的XML文档)
- 慢点
- 通用模型,即您使用节点
Stax:优点
- 最好的SAX和DOM,即DOM的简化和SAX的效率
- 记忆有效
- 拉模型
- 读写API
- 支持细分
- 可以在一个线程中同时读取多个文档
- XML的并行处理更容易
Stax:缺点
- 不支持模式验证(据我所记得,不确定他们是否已添加)
- 只能像萨克斯一样前进
- 没有xml操作
JAXB:优点
- 使您无需了解XML即可访问和处理XML数据
- 双向的
- 比DOM具有更高的内存效率
- SAX和DOM是通用解析器,其中JAXB会创建特定于XML Schmea的解析器
- 数据转换:JAXB可以将xml转换为Java类型
- 通过对象API支持XML MANIPULATION
JAXB:缺点
- 只能解析有效的XML
Trax: 使用XSLT将XML从一种形式转换为另一种形式
实作
SAX,DOM,Stax,JAXB只是规范。这些规范有许多开源和商业实现。大多数情况下,您可以坚持使用JDK或应用程序服务器附带的功能。但是有时您需要使用默认提供的其他实现。这是您可以欣赏JAXP包装器api的地方。
JAXP 允许您通过配置切换实现,而无需修改代码。它还提供了一个与解析器/规范无关的api,用于解析,转换,验证和查询XML文档。
各种实现的性能和其他比较
- Stax:http: //java.sun.com/performance/reference/whitepapers/StAX-1_0.pdf
- 大部分API:http: //www.ibm.com/developerworks/xml/library/x-databdopt2/
- SO上的JAXB与XmlBeans讨论:JAXB与Apache XMLBeans
- http://www.ibm.com/developerworks/xml/library/x-injava/
现在的标准是好的,但是有时您会遇到这种疯狂的用例,在这种情况下,您必须支持解析大小为 100 GB 的XML文档,或者您需要 超快速
的XML处理(可能是您正在实现XML解析器芯片),并且是当您需要放弃标准并寻找不同的处理方式时。关于使用正确的工具完成正确的工作!这是我建议您查看
vtd-xml的地方
在SAX和DOM最初的日子里,人们希望使用比任何一个都提供的API更简单的API。我知道JDOM,dom4j,XmlBeans,JiBX,Castor是流行的。



