Android:DOM、SAX和XMLPullParser解析有什么区别?

12

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

我想知道在DOM、SAX解析器和XMLPullParser中,哪一个更好、更快。


可能是重复的问题:Android:最佳XML解析库? - Marek Sebera
3
你可以在这里找到最好的教程:http://totheriver.com/learn/xml/xmltutorial.html#5.4 - Lalit Poptani
良好的教程链接 @LalitPoptani......... - Lucifer
是的,我也会选择XMLPullParser。 - Sergey Benner
你尝试使用过vtd-xml吗? - vtd-xml-author
3个回答

8

这取决于你在做什么,如果你有非常大的文件,则应使用SAX解析器,因为它会触发事件并释放它们,不会将任何内容存储在内存中。使用SAX解析器,您无法以随机方式访问元素,也不能返回到之前的位置。但Dom允许您访问XML文件的任何部分,因为它将整个文件/文档保存在内存中。希望这回答了你的问题。

如果你想知道最快的解析器是哪个,Xerces 是最快的解析器,而SAX解析器应该比Dom性能更高。


我正在寻找解析我拥有的XML文档的最快方法。该文档并不是很大。 - Basbous
@Basbous:SAX或XMLPullParser是最快的,但DOM使用起来远比它们容易。 - Mooing Duck

1
一种分类不同类型的解析器的方式是它们是否需要一次性将整个XML文档加载到内存中。基于文档对象模型(DOM)的解析器会这样做:它们将XML文档解析成树状结构,然后可以在内存中遍历该结构以读取其内容。这使您能够以任意顺序遍历文档,并产生一些有用的API,可以在DOM上添加,例如XPath,一种专门设计用于从树中提取信息的路径查询语言。仅使用DOM并没有太大好处,因为其API很笨重,即使您不需要也总是读取所有内容到内存中是非常昂贵的。因此,在大多数情况下,DOM解析器不是在Android上解析XML的最佳选择。
有一类解析器不需要预先加载文档。这些解析器是基于流的,这意味着它们在仍从数据源(Web 或磁盘)读取 XML 文档时处理它。这意味着您无法像 DOM 一样随机访问 XML 树,因为不维护文档的内部表示。流解析器可以进一步区分。有推送解析器,当流式传输文档时,会在遇到新元素时回调到您的应用程序中。SAX 解析器属于这个类别。然后还有 pull 解析器,更像迭代器或光标:在这里,客户端必须显式地要求检索下一个元素。

1

我已经在使用SAX解析器,但我想问一下DOM或XMLPullParser哪个更快? - Basbous
访问很容易,但使用起来非常困难/繁琐! - vtd-xml-author

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接