在哪里可以找到 Java XML 框架的详细比较? [关闭]

Posted

技术标签:

【中文标题】在哪里可以找到 Java XML 框架的详细比较? [关闭]【英文标题】:Where I can find a detailed comparison of Java XML frameworks? [closed] 【发布时间】:2011-04-20 19:09:20 【问题描述】:

我正在尝试为我的 Java 项目选择一个 XML 处理框架,但我不知所措.. XOM、JDOM 等。在哪里可以找到所有流行 Java XML 框架的详细比较?

【问题讨论】:

我没有比较...但这里列出了一些 Java 中的 XML 处理器:java-source.net/open-source/xml-parsers 请注意,其中一些解析器项目已经多年不活跃了。如果您对对象到 XML 的绑定感兴趣,请查看 MOXy JAXB(我是技术主管),bdoughan.blogspot.com/2010/09/… 不要关闭考虑迁移到softwarerecs.stackexchange.com 2019 年更新 baeldung.com/java-xml-libraries 。这是一个在 2021 年仍然有意义的老问题。 【参考方案1】:

正如 Blaise 指出的,坚持标准。但是在此期间创建了多个标准来解决不同的问题/用例。选择哪一个完全取决于您的要求。我希望下面的比较可以帮助您选择合适的。

现在您必须选择两件事APIAPI的实现(有很多)

API

SAX:优点

基于事件 内存高效 比 DOM 更快 支持架构验证

SAX:缺点

没有对象模型,你必须利用 事件和创造你自己 xml 的单次解析,只能 前进 只读api 不支持 xpath 有点难用

DOM:优点

内存对象模型 保留元素顺序 双向 读写api xml 操作 使用简单 支持架构验证

DOM:缺点

较大的 XML 文档占用内存 (通常用于 XML 文档 小于 10 mb) 慢 通用模型,即您使用节点

Stax:优点

最好的 SAX 和 DOM,即 DOM 的易用性 SAX 的效率和效率 内存高效 拉模型 读写api supports subparsing 可以同时读取多个文档 在一个线程中 XML 的并行处理更容易

Stax:缺点

不支持模式验证(目前 我记得,不确定他们是否有 现在添加) 只能像萨克斯一样前进 没有 xml 操作

JAXB:优点

允许您访问和处理 XML 无需了解 XML 的数据 双向 比 DOM 更节省内存 SAX 和 DOM 是通用解析器,其中 因为 JAXB 创建了一个特定于 你的 XML 架构 数据转换:JAXB可以转换xml 到 java 类型 支持通过对象进行 XML MANIPULATION API

JAXB:缺点

只能解析有效的 XML

Trax:用于使用 XSLT 将 XML 从一种形式转换为另一种形式

实现

SAX、DOM、Stax、JAXB 只是规范。有很多open source and commercial implementations of these specifications。大多数情况下,您可以坚持使用 JDK 或应用程序服务器附带的内容。但有时您需要使用默认提供的不同实现。在这里您可以欣赏JAXP wrapper api。 JAXP 允许您通过配置切换实现,而无需修改代码。它还提供了一个独立于解析器/规范的 api,用于解析、转换、验证和查询 XML 文档。

各种实现的性能和其他比较

斯塔克斯: http://java.sun.com/performance/reference/whitepapers/StAX-1_0.pdf 大部分 API: http://www.ibm.com/developerworks/xml/library/x-databdopt2/ JAXB 与 XmlBeans 关于 SO 的讨论:JAXB vs Apache XMLBeans http://www.ibm.com/developerworks/xml/library/x-injava/

现在标准很好,但有时您会遇到这种疯狂的用例,您必须支持对 100 GB 大小的 XML 文档的解析,或者您需要 超快 XML 的处理(可能是您正在实现 XML 解析器芯片),此时您需要转储标准并寻找不同的处理方式。它是关于使用正确的工具来完成正确的工作!这就是我建议你看看vtd-xml

在 SAX 和 DOM 最初的日子里,人们想要比它们提供的更简单的 API。 JDOM、dom4j、XmlBeans、JiBX、Castor 是我所知道的变得流行的那些。

【讨论】:

JAXB (JSR-222) 实现不需要 XML 模式或编译步骤。下面是一个从 Java 类开始的例子:blog.bdoughan.com/2012/07/jaxb-no-annotations-required.html 投反对票的先生能否解释一下原因。 不要相信任何实现!天啊……我刚才是不是……我本地机器上的 Oracle JDK 8 单元测试解析 XML 节点的字符串值,如下所示:'vyFPEHYkvQNfrR6i',生产系统吐出:[#text:vyFPEHYkvQNfrR6i]。同源。疯了!【参考方案2】:

@Pangea

JAXB vs DOM and SAX

JAXB 不能与 DOM 和 SAX 直接比较。 Java DOM 和 SAX 解析 API 是解析 XML 文档的低级 API,而 JAXB (Java API for XML Binding) 是用于转换 XML 的高级 API Java 对象层次结构的元素和属性(反之亦然)。 JAXB 的实现很可能会使用 DOM 或 SAX 解析器 在后台对 XML 输入数据进行实际解析。

【讨论】:

以上是关于在哪里可以找到 Java XML 框架的详细比较? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

2020 年在哪里可以找到 BLE GATT 规范 xml? [关闭]

学妹想学SpringBoot,连夜整理一篇SpringBoot入门最详细教程笔记

我在哪里可以查看 Android xml 文件(在线)?

在哪里可以找到读取 vcard 文件的 java 库? [关闭]

如何告诉 visualvm 在哪里可以找到我的源代码?

在哪里可以找到特定于应用程序的 context.xml 文件?