作为 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/