作为XML解析的新手,我正在尝试理解不同的技术.针对不同需求存在大量不同的技术:
W3C-DOM
XOM
JDOM
JAXP
JAXB
DOM
SAX
StAX的
TrAX的
Woodstox
DOM4J
赤红
VTD-XML
的Xerces-J
蓖麻
XStream的
...
仅举几个.
DOM和SAX似乎是解析和处理XML的低级方式,所以我决定专注于那些在不同来源中被提及最多并且是低级的:
DOM,SAX,JAXP.
我读过有关,一般在这里解析器上计算器,JAXP教程从Oracle,XML的解析一般,等等.
我也尝试了一些类似德语和其他的教程.
我现在正在抓一点DOM和SAX,但是使用JAXP的原因仍然超出我的意思.它似乎更像是一个在内部使用DOM,SAX,...的接口,但为什么不直接使用DOM或SAX呢?
在外行术语中使用JAXP有什么好处?
(虽然你没有这么明确地说过,但你的问题似乎只与Java世界有关,而这个答案反映了这一点.)
JAXP是一组接口,包括XML解析,XSLT转换和XML模式验证.如果我们只关注XML解析方面,它的主要贡献是提供一种定位XML解析器实现的机制,因此您的源代码不会被锁定到特定产品中.坦率地说,这些日子价值有限; 常用的两个SAX/DOM解析器是JDK中嵌入的解析器和Apache Xerces.除了需要单独下载之外,Apache Xerces在各个方面都更好.
至于其他解析接口,它们分为两类:基于事件的API和基于树的API.基于树的API更易于使用,但在处理大型文档时可能会占用大量内存.
两个主要的基于事件的API是SAX(推送)和StAX(拉).拉解析是许多程序员更容易找到的东西,因为你可以使用程序堆栈来维护状态信息; 不幸的是,虽然StAX API有点儿错误 - 不同的实现已经以不同的方式修复了它的差距.StAX最完整可靠的实现是Woodstox解析器; SAX最完整可靠的实现是Apache Xerces.但是,不要尝试使用基于事件的解析方法,除非您的应用程序确实需要该级别的性能(除非您具有避免在应用程序级别丢失所有性能增益所需的经验水平.)
对于基于树的API,DOM仍然占主导地位,因为它由W3C定义并在JDK中实现,因此被视为"标准"; 这也是关于这个主题的所有书籍中提到的那个.然而,在所有树模型中,毫无疑问它是最糟糕的设计(主要是因为它早于名称空间的引入).替代方案包括JDOM2,DOM4J,XOM和AXIOM.我倾向于推荐JDOM2或XOM.