15

我想知道Android中的XML SAX解析器、拉解析器和DOM解析器有什么区别。在什么条件下,性能和实现上哪一个更好?

谢谢。霍拜卜。

4

3 回答 3

33

Dom Parser - 它使用基于对象的方法。即,它首先将整个 XML 加载到内存中,将 XML 节点转换为对象,然后开始解析它们。所以,它相当慢。

SAX 和 PULL Parser -他们使用基于事件的方法。两者在内存和性能方面几乎相同。然而,关于何时使用它们的区别情况很少,如下所述。

Dom Parser -当您需要在解析之前验证整个 XML 时使用它。当 XML 太大并且验证可能会受到影响时,切勿使用它。一旦开始解析,它就会从起始节点解析到结束节点。没有办法只解析特定的节点。

SAX -当您想要解析整个 XML 时使用它。一旦开始解析,它就会从起始节点解析到结束节点。没有办法只解析特定的节点。

PULL -当您不想解析整个 XML 时使用它。它比 SAX 更容易实现,因为您不必维护解析器的状态。您只能拉取您感兴趣的特定节点。

我的建议是 - 需要验证 - Go for DOM,文件大小或者您对解析整个 XML-Go 不感兴趣,文件大小很大或者您需要解析整个 XML文件 - Go for SAX

于 2014-07-02T10:40:41.537 回答
14

Sax Parser : XML Parse node to node 的简单 API,使用自上而下的遍历,解析而不存储 xml,与 Dom 相比更快 允许插入或删除节点操作。需要 SAXParserFactory

Dom Parser:文档对象模型在处理之前将整个xml存储在内存中,沿任何方向遍历,不允许像插入或删除这样的节点操作。需要 DocumentBuilderFactory

拉解析器:它提供了以上两者的更多控制和速度。需要 pullParserFactory

于 2012-07-02T16:18:24.753 回答
0

就性能而言,SAX 通常会使用更少的内存。而且您只处理您想要的事件,例如 startElement()、startDocument()、endElement() 等,因此您只会保存您想要的特定数据。DOM 会将整个 XML 文件加载到内存中。

于 2012-07-02T16:18:29.277 回答