Android:DOM vs SAX vs XMLPullParser 解析?

Posted

技术标签:

【中文标题】Android:DOM vs SAX vs XMLPullParser 解析?【英文标题】:Android: DOM vs SAX vs XMLPullParser parsing? 【发布时间】:2012-02-12 04:25:07 【问题描述】:

我正在使用 SAX Parser 解析 XML 文档。

我想知道使用 DOMSAX ParserXMLPullParser 哪个更好更快。

【问题讨论】:

android: Best XML Parsing Library? 的可能重复项 最好的教程有这个here。 很好的教程链接@LalitPoptani......... 是的,我也会使用 XMLPullParser。 你试过用vtd-xml吗? 【参考方案1】:

这取决于你在做什么,如果你有非常大的文件,那么你应该使用 SAX 解析器,因为它会触发事件并释放它们,没有任何东西存储在内存中,并且使用 SAX 解析器你不能访问元素随意的方式没有回头路! ,但是 Dom 允许您访问 xml 文件的任何部分,因为它将整个文件/文档保存在内存中。希望这个回答你的问题。

如果您想知道哪个最快的解析器 Xerces 会是最快的,那么 SAX 解析器应该比 Dom 提供更多的性能

【讨论】:

我正在寻找最快的方法来解析我拥有的 XML 文档。不是很大的文件。 @Basbous:SAX 或 XMLPullParser 是最快的,但 DOM更容易使用。【参考方案2】:

SAX XML Parser 已在 Android SDK 中可用。

http://developer.android.com/reference/org/xml/sax/XMLReader.html

所以很容易访问。

【讨论】:

我已经在使用 SAX 解析器,但我问 DOM 或 XMLPullParser 是否更快?? 它很容易访问,但使用起来非常困难/乏味!【参考方案3】:

可以对不同类型的解析器进行分类的一个方面是它们是否需要预先将整个 XML 文档加载到内存中。基于文档对象模型 (DOM) 的解析器这样做:它们将 XML 文档解析为树结构,然后可以在内存中遍历该结构以读取其内容。这允许您以任意顺序遍历文档,并产生一些可以在 DOM 之上的有用 API,例如 XPath,一种专门设计用于从树中提取信息的路径查询语言。单独使用 DOM 并没有太大的好处,因为它的 API 很笨重,而且即使不需要,也总是将所有内容读入内存很昂贵。因此,在大多数情况下,DOM 解析器并不是在 Android 上解析 XML 的最佳选择。

有些解析器不需要预先加载文档。这些解析器是基于流的,这意味着它们在处理 XML 文档的同时仍从数据源(Web 或磁盘)读取它。这意味着 您不能像使用 DOM 那样随机访问 XML 树,因为没有维护文档的内部表示。流解析器可以进一步相互区分。 推送解析器在流式传输文档时会在遇到新元素时回调到您的应用程序。 SAX 解析器属于此类。然后是拉解析器,它更像是迭代器或游标:这里客户端必须明确要求检索下一个元素。

来源:Android in Practice。

【讨论】:

以上是关于Android:DOM vs SAX vs XMLPullParser 解析?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 android 中使用 DOM 或 SAX 解析器从 XML 读取子节点

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

xml文件操作

XML解析,SAX解析XML

XML文件解析安卓7——SAX解析

XML.03-DOM和SAX解析