【发布时间】:2012-07-03 01:55:00
【问题描述】:
我想知道Android中的XML SAX解析器、Pull解析器和DOM解析器有什么区别。在什么情况下,哪一个在性能和实现上更好?
谢谢。 霍拜布。
【问题讨论】:
标签: android saxparser xmlpullparser domparser
我想知道Android中的XML SAX解析器、Pull解析器和DOM解析器有什么区别。在什么情况下,哪一个在性能和实现上更好?
谢谢。 霍拜布。
【问题讨论】:
标签: android saxparser xmlpullparser domparser
Sax Parser : XML 的简单 API 解析节点到节点,使用自顶向下遍历,解析不存储xml, 与 Dom 相比更快 允许像插入或删除这样的节点操作。 需要 SAXParserFactory
Dom 解析器: 文档对象模型 在处理之前将整个 xml 存储在内存中,沿任意方向遍历, 不允许像插入或删除这样的节点操作。 需要 DocumentBuilderFactory
Pull Parser:它提供了比上述两个更多的控制和速度。需要 pullParserFactory
【讨论】:
就性能而言,SAX 通常会使用更少的内存。你只处理你想要的事件,例如startElement()、startDocument()、endElement() 等,因此您只会保存您想要的特定数据。 DOM 会将整个 XML 文件加载到内存中。
【讨论】:
Dom Parser - 它使用基于对象的 方法。即,它首先将整个 XML 加载到内存中,将 XML 节点转换为对象,然后开始解析它们。所以,它相当慢。
SAX 和 PULL Parser - 他们使用 基于事件的 方法。两者在内存和性能方面几乎相同。但是,对于何时使用它们,几乎没有区别情况,如下所述。
Dom Parser - 当您需要在解析之前验证整个 XML 时使用它。 当 XML 太大并且验证可能会受到影响时,切勿使用它。 一旦开始解析,它就会从起始节点解析到结束节点。没有办法只解析特定的节点。
SAX - 当您想要解析整个 XML 时使用它。 一旦开始解析,它就会从起始节点解析到结束节点。没有办法只解析特定的节点。
PULL - 当您不想解析整个 XML 时使用它。它比 SAX 更容易实现,因为您不必维护解析器的状态。您只能拉取您感兴趣的特定节点。
我的建议是 - 需要验证 - 使用 DOM,文件大小小 或者你不是有兴趣解析整个 XML-Go for PULL,文件大小为 large 或者您需要解析 整个 XML 文件 - 转到 SAX。
【讨论】: