Android:DOM vs SAX vs XMLPullParser解析?

时间:2012-01-17 10:53:52

标签: java android xml xml-parsing

我正在使用SAX Parser解析XML Document。

我想知道使用 DOM SAX Parser XMLPullParser 哪个更好,更快。

3 个答案:

答案 0 :(得分:7)

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

如果您想知道哪个最快的解析器Xerces将是您找到的最快的解析器,并且SAX解析器应该为您提供比Dom更多的性能

答案 1 :(得分:1)

SAX XML Parser已经可用于Android SDK。

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

因此很容易访问。

答案 2 :(得分:1)

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

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

来源:Android实践。