java - 在 Java 中直接使用 JAXP 而不是 DOM/SAX 有什么好处?

标签 java xml dom sax jaxp

作为 XML 解析的新手,我正在尝试了解不同的技术。针对不同需求的不同技术数量令人困惑:

  • W3C-DOM
  • XOM
  • jDom
  • JAXP
  • JAXB
  • DOM
  • 萨克斯
  • StAX
  • TrAX
  • 伍德斯托克斯
  • dom4j
  • 深红色
  • VTD-XML
  • Xerces-J
  • 蓖麻
  • 流媒体
  • ...

仅举几例。

DOM 和 SAX 似乎是解析和处理 XML 的低级方法,因此我决定专注于在不同来源中提到最多的低级方法:

DOM、SAX、JAXP。

我在 stackoverflow 上阅读了一般的解析器, JAXP-Tutorial from Oracle , XML-Parsing in general , 等等。

我也试过一些教程,比如 this german one和其他人。

我现在对 DOM 和 SAX 有了一点了解,但我仍然不明白使用 JAXP 的原因。内部使用DOM、SAX、……似乎更像是一个接口(interface),但为什么不直接使用DOM或SAX呢?

通俗地说,使用 JAXP 有什么好处?

最佳答案

(虽然您没有明确表示,但您的问题似乎只与 Java 世界相关,这个答案反射(reflect)了这一点。)

JAXP 是一组涵盖 XML 解析、XSLT 转换和 XML 模式验证的接口(interface)。如果我们只关注 XML 解析方面,它的主要贡献是提供了一种用于定位 XML 解析器实现的机制,因此您的源代码不会被锁定到特定产品中。坦率地说,这些天的值(value)有限;仅有的两个常用的 SAX/DOM 解析器是嵌入在 JDK 中的解析器和 Apache Xerces。 Apache Xerces 在各个方面都更好,只是您需要单独下载它。

至于其他的解析接口(interface),分为两类:基于事件的API和基于树的API。基于树的 API 更易于使用,但在处理大型文档时会占用大量内存。

两个主要的基于事件的 API 是 SAX(推)和 StAX(拉)。许多程序员发现拉式解析更容易,因为您可以使用程序堆栈来维护状态信息;不幸的是,尽管 StAX API 有点问题 - 不同的实现以不同的方式修复了它的差距。 StAX 最完整、最可靠的实现是 Woodstox 解析器; SAX 最完整、最可靠的实现是 Apache Xerces。但不要尝试使用基于事件的解析方法,除非您的应用程序确实需要该级别的性能(并且除非您拥有避免在应用程序级别失去所有性能 yield 所需的经验级别。)

对于基于树的 API,DOM 仍然占主导地位,仅仅是因为它由 W3C 定义并在 JDK 中实现,因此被视为“标准”;这也是所有关于该主题的书籍中提到的那个。然而,在所有树模型中,它无疑是设计最差的(主要是因为它早于 namespace 的引入)。备选方案包括 JDOM2、DOM4J、XOM 和 AXIOM。我倾向于推荐 JDOM2 或 XOM。

关于java - 在 Java 中直接使用 JAXP 而不是 DOM/SAX 有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34608731/

相关文章:

json - 将 JSON HTTP 请求转换并转换为 XML

javascript - MXGraph 添加边

java - 如何将 XML 转换为 java.util.Map,反之亦然?

javascript - 单击更改数据属性

javascript - 使用 JQuery 打开和关闭 span 标签

java - Android Studio - 传递带有 Intent 添加额外变量的变量,最终为 null

java - 用于打开 Ms-Dos 编辑器并保存文件的批处理文件

java - selenium - 无法在 gmail 中找到“撰写”按钮

java - 我的 ImageButton 没有像代码告诉它的那样重新缩放。事实上它什么也没做

javascript - DOM属性改变调试