2012-01-17 70 views
8

我使用SAX解析器解析XML文档。Android:DOM vs SAX vs XMLPullParser解析?

我想知道这是更好,更快地与DOMSAX解析器XMLPullParser工作。

+0

可能的重复[Android:最佳XML解析库?](http://stackoverflow.com/questions/3926367/android-best-xml-parsing-library) – 2012-01-17 10:55:26

+3

最好的教程,你有这[这里]( http://totheriver.com/learn/xml/xmltutorial.html#5.4)。 – 2012-01-17 10:58:01

+0

好教程链接@LalitPoptani ......... – Lucifer 2012-01-17 11:00:19

回答

5

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

,如果你想知道哪些最快的解析器Xerces将是最快的,你会发现和SAX解析器应该给你更多的性能比DOM

+0

我正在寻找解析XML文档的最快方法。 不是大文件。 – Basbous 2012-01-17 11:05:48

+0

@Basbous:SAX或XMLPullParser是最快的,但DOM更容易使用。 – 2015-10-16 18:39:39

1

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

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

来源:Android实践。