在哪里可以找到Java XML框架的详细比较?
我正在尝试为我的Java项目选择一个XML处理框架,我迷失了名字…… XOM,JDOM等。在哪里可以找到所有流行的Java XML框架的详细比较?
正如布莱斯指出坚持标准。 但是,在此期间创建了多个标准来解决不同的问题/用例。 选择哪一个完全取决于您的要求。 我希望以下比较可以帮助您选择正确的。
现在有两件事你必须选择。 API和API的实现 (有很多)
API
SAX:优点
- 基于事件
- 记忆效率高
- 比DOM快
- 支持模式validation
萨克斯:缺点
- 没有对象模型,你必须利用事件并创建自己
- 单个解析xml并且只能前进
- 只读api
- 没有xpath支持
- 有点难用
DOM:优点
- 内存中的对象模型
- 保留元素顺序
- 双向
- 读写api
- xml操作
- 简单易用
- 支持模式validation
DOM:缺点
- 大型XML文档的内存耗费(通常用于小于10 MB的XML文档)
- 比较慢
- 通用模型,即您使用节点
Stax:优点
- 最好的SAX和DOM即DOM的易用性和SAX的效率
- 记忆效率高
- 拉模型
- 读写api
- 支持subparsing
- 可以在一个单独的线程中同时读取多个文档
- 并行处理XML更容易
Stax:缺点
- 没有架构validation支持(据我记得,不确定他们现在是否添加了它)
- 只能像萨克斯一样前进
- 没有xml操作
JAXB:优点
- 允许您访问和处理XML数据,而无需了解XML
- 双向
- 比DOM更有效的内存
- SAX和DOM是通用解析器,其中JAXB创建特定于XML Schmea的解析器
- 数据转换:JAXB可以将xml转换为java类型
- 通过对象API支持XML MANIPULATION
JAXB:缺点
- 只能解析有效的XML
Trax:使用XSLT将XML从1种forms转换为另一种forms
实现
SAX,DOM,Stax,JAXB只是规格。 这些规范有许多开源和商业实现 。 大多数情况下,您可以坚持使用JDK或您的应用程序服务器。 但有时您需要使用默认提供的不同实现。 这是您可以欣赏JAXP包装器API的地方 。 JAXP允许您通过配置切换实现,而无需修改代码。 它还提供了解析器/规范独立的api,用于解析,转换,validation和查询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千兆字节的XML文档,或者你需要超快速的XML处理(可能是你正在实现一个XML解析器芯片)当你需要抛弃标准并寻找不同的做事方式时。 它是关于使用正确的工具正确的工作! 这是我建议你看看vtd-xml的地方
在SAX和DOM的最初几天,人们想要比其中任何一个提供的API更简单。 我知道JDOM , dom4j , XmlBeans , JiBX , Castor变得流行。
@ Pangea
JAXB与DOM和SAX
JAXB与DOM和SAX无法直接比较。 Java DOM和SAX解析API是用于解析XML文档的低级API,而JAXB(用于XML绑定的Java API)是用于将XML元素和属性转换为Java对象层次结构的更高级API(反之亦然)。 JAXB的实现很可能在幕后使用DOM或SAX解析器来实际解析XML输入数据。