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

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

【问题讨论】:

标签: java xml architecture jaxb xml-parsing


【解决方案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 apiJAXP 允许您通过配置切换实现,而无需修改代码。它还提供了一个独立于解析器/规范的 api,用于解析、转换、验证和查询 XML 文档。

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


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

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

【讨论】:

  • 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 输入数据进行实际解析。

【讨论】:

    猜你喜欢
    • 2017-11-07
    • 2013-09-29
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    相关资源
    最近更新 更多