代码之家  ›  专栏  ›  技术社区  › 

与DOM和SAX相比,XPath是否更高效?

  •  20
  •  · 技术社区  · 6 年前

    我需要解析xml字符串并查找特定文本节点的值、属性值等。

    请帮忙。。。。

    5 回复  |  直到 16 年前
        1
  •  32
  •   Dave Cheney    16 年前

    SAX是一个自顶向下的解析器,允许对XML文档进行串行访问,并且对于只读访问效果良好。另一方面,DOM更健壮——它将整个XML文档读入一棵树中,当您想要更改、添加或删除该XML树中的数据时,它非常高效。当您只需要XML文档中的几个值,并且知道在哪里可以找到它们(您知道数据的路径,/root/item/challange/text)时,XPath非常有用。

    SAX:在迭代文档时非常节省时间,每次迭代只需一次

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

    XPath:当您只需要读取几个值时,时间效率很高

        2
  •  10
  •   Pete Kirkham    16 年前

    streaming XPath ,很可能您的XPath引擎正在将所有内容加载到内存中,因此它将具有与DOM类似的特性。因此,这取决于你对“效率”的定义。它当然更易于使用,XPath实现可能会变得更高效,而DOM在客户机上总是会有整个文档的一些表示,SAX编程总是比XPath难很多。

        3
  •  1
  •   Dimitre Novatchev    16 年前

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

    尤其是,XPathDocument类被设计为比使用(基于DOM的)XmlDocument类更高效地计算XPath表达式。原因是XPathDocument是XML文档的只读表示,而DOM实现还包括更改文档。

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

        4
  •  1
  •   gioele    10 年前

    看见 http://code.google.com/p/jlibs/wiki/XMLDog

    我们向XMLDog提供一组XPath,并要求嗅探一些XML文档。 所有给定的XPath。

        5
  •  0
  •   TechTravelThink    16 年前

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