与DOM和SAX相比,XPath的效率更高吗?

时间:2009-03-27 09:44:38

标签: xml dom xpath sax

我需要解析xml字符串并查找特定文本节点,属性值等的值。 我在javascript中这样做,并且正在使用DOMParser类。后来我被告知DOM占用了大量内存,SAX是更好的选择。

最近我发现XPath也提供了一种查找节点的简单方法。

但是我不确定这3个中哪个是解析XML的最有效方法。 请帮助......

5 个答案:

答案 0 :(得分:27)

SAX是一个自上而下的解析器,允许对XML文档进行串行访问,并且适用于只读访问。另一方面,DOM更强大 - 它将整个XML文档读入树中,并且当您想要更改,添加,删除该XML树中的数据时,它非常有效。当您只需要XML文档中的几个值时,XPath非常有用,并且您知道在哪里找到它们(您知道数据的路径,/ root / item / challange / text)。

SAX:在迭代文档时节省时间,为每次迭代提供单次传递

DOM:灵活/性能,为您提供更多数据处理方式

XPath:只需要读取几个值时效率

答案 1 :(得分:10)

除非你使用streaming XPath的研究原型,否则你的XPath引擎很可能正在将所有内容加载到内存中,因此它具有与DOM类似的特性。所以它取决于你对“效率”的定义。它当然更容易使用,并且XPath实现可以更改为更高效,而DOM将始终在客户端计算机上具有整个文档的一些表示,并且SAX将始终比XPath更难以编程。

答案 2 :(得分:1)

This document from MSDN提供了有关优化XML处理的大量信息

特别是,XPathDocument类被设计为比使用(基于DOM的)XmlDocument类更有效地评估XPath表达式。原因是XPathDocument是XML文档的只读表示,而DOM实现也包括更改文档。

使用DOM有一个不那么重要的缺点,它通常会导致难以理解和维护的复杂的意大利面条代码。

答案 3 :(得分:1)

请参阅http://code.google.com/p/jlibs/wiki/XMLDog

  

我们给XMLDog提供了一组xpath,并要求嗅探一些XML文档。   它使用SAX并对其评估的文档进行一次传递   所有给定的XPath。

答案 4 :(得分:0)

如果您只需要查找特定文本节点的值,那么XPath。 DOM占用大量内存的原因是因为它读取整个XML并形成文档的树。 SAX是基于事件的。因此,根据您的描述,XPath最适合您的场景。