android中XML SAX解析器、Pull解析器和DOM解析器的区别

Posted

技术标签:

【中文标题】android中XML SAX解析器、Pull解析器和DOM解析器的区别【英文标题】:Difference among XML SAX parser, Pull parser & DOM Parser in android 【发布时间】:2012-07-03 01:55:00 【问题描述】:

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

谢谢。 霍拜布。

【问题讨论】:

【参考方案1】:

Sax Parser : XML 的简单 API 解析节点到节点,使用自顶向下遍历,解析不存储xml, 与 Dom 相比更快 允许像插入或删除这样的节点操作。 需要 SAXParserFactory

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

Pull Parser:它提供了比上述两个更多的控制和速度。需要 pullParserFactory

【讨论】:

Sax 和 DOM 不是相反吗? Dom 允许插入和删除,而 Sax 只是一个解析器?参考:docs.oracle.com/javase/6/docs/api/org/w3c/dom/Document.html 嘿,管理员,请根据上面的评论编辑答案(因为这个投票最多):DOM 允许节点插入/删除,而 SAX 不允许't 为什么 Sax 比 Pull 快?对于 Pull,您甚至可以在阅读时停止解析,这意味着您可以在需要时做更少的工作......【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

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

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

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

我的建议是 - 需要验证 - 使用 DOM,文件大小 或者你不是有兴趣解析整个 XML-Go for PULL,文件大小为 large 或者您需要解析 整个 XML 文件 - 转到 SAX

【讨论】:

SAX 存在自关闭标签问题***.com/questions/2707531/…

以上是关于android中XML SAX解析器、Pull解析器和DOM解析器的区别的主要内容,如果未能解决你的问题,请参考以下文章

Android学习——pull解析方式

Android之解析XML格式数据

xml文件操作

Android中三种常用解析XML的方式(DOMSAXPULL)简介及区别

Android 之XML数据解析—— SAX解析

android pull 解析xml文件