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

2022-09-01 13:47:13

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


答案 1

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

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

应用程序接口

萨克斯:优点

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

萨克斯:缺点

  • 没有对象模型,你必须利用事件并创建你的自我
  • xml 的单一解析,只能继续
  • 只读 API
  • 不支持 xpath
  • 使用起来有点困难

DOM: 优点

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

DOM: 缺点

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

斯塔克斯:优点

  • 最好的SAX和DOM,即DOM的易用性和SAX的效率
  • 内存效率高
  • 拉动模型
  • 读写接口
  • 支持子解析
  • 可以在一个线程中同时读取多个文档
  • XML 的并行处理更容易

斯塔克斯:缺点

  • 没有架构验证支持(据我所知,不确定他们现在是否已经添加了它)
  • 只能像萨克斯一样前进
  • 无 xml 操作

JAXB: 优点

  • 允许您访问和处理 XML 数据,而无需了解 XML
  • 双向
  • 比 DOM 更高的内存效率
  • SAX 和 DOM 是通用解析器,其中 JAXB 会创建一个特定于 XML Schmea 的解析器
  • 数据转换:JAXB可以将xml转换为java类型
  • 支持通过对象 API 进行 XML 操作

JAXB: 缺点

  • 只能解析有效的 XML

特拉克斯:用于使用 XSLT 将 XML 从 1 个表单转换为另一个表单

实现

SAX,DOM,Stax,JAXB只是规格。这些规范有许多开源和商业实现。大多数时候,您可以坚持使用JDK或应用程序服务器附带的内容。但有时您需要使用默认提供的不同实现。在这里,您可以欣赏 JAXP 包装器 apiJAXP 允许您通过配置切换实现,而无需修改代码。它还提供了一个独立于解析器/规范的 API,用于解析、转换、验证和查询 XML 文档。

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


现在标准很好,但偶尔你会遇到这个疯狂的用例,你必须支持解析大小为100千兆字节的XML文档,或者你需要超快的XML处理(可能是你正在实现一个XML解析器芯片),这是你需要转储标准并寻找不同的做事方式的时候。这是关于使用正确的工具进行正确的工作!这就是我建议你看看vtd-xml的地方

在SAX和DOM的最初几天,人们想要比他们中的任何一个提供的更简单的API。JDOMdom4jXmlBeansJiBXCastor是我所知道的流行。


答案 2

@Pangea

JAXB vs DOM 和 SAX

JAXB不能直接与DOM和SAX相提并论。Java DOM 和 SAX 解析 API 是用于解析 XML 文档的较低级别 API,而 JAXB(用于 XML 绑定的 Java API)是用于将 XML 元素和属性转换为 Java 对象层次结构的更高级别 API(反之亦然)。JAXB 的实现很可能在后台使用 DOM 或 SAX 解析器来执行 XML 输入数据的实际解析。


推荐