如何从Android应用程序中的webservice解析巨大的xml数据?

时间:2010-12-06 06:00:30

标签: android xml-parsing

我是Android应用程序开发的新手。

我正在开发一个需要调用.NET Web服务并解析XML数据的应用程序。当我解析普通的XML数据时,它适用于DOM Parser。但是,当XML数据很大时,它会抛出“Out of memory error”。

Android中是否有其他解析器可用于解析大量XML数据..

请帮帮我或建议我..

我真的很需要这个。

3 个答案:

答案 0 :(得分:2)

使用SAX parser。 SAX解析器旨在处理巨大的XML文件。它不是一次性将XML文件加载到内存中,而是逐个元素遍历文档并通知您。

此外,如果XML文件非常大,您可能还想查看文件的加载方式。不要打开文件并一次性将整个内容提供给SAX解析器。而是逐块读取它(例如,一次4Kb块)并将其输入SAX解析器。

编辑:SAX解析器与DOM解析器的工作方式非常不同。基本上,它只是一次遍历文档一个元素。每当它找到一个打开或关闭的标记时,它会调用你的一个函数(作为回调)并告诉它标记是什么以及数据是什么(如果有的话)。它从一开始就开始,一直持续到最后,永不回头。这是连续的。这意味着两件事:

  • 更多代码。您的回调需要确定遇到某些标记时应该做什么,应该跳过哪些标记,等等。 SAX解析器不会返回,因此如果您需要记住以后的任何内容,则需要自己完成。所以是的,处理包含许多不同标签的许多API将会有更多的工作。

  • 它可以解析部分XML。如果只是XML文件的前4 Kb,则无需关注。它不会产生错误,只是在完成后只需要另一个块数据。只有当遇到不匹配的结束标记(或者你过早停止提供数据)时才会产生错误。

所以是的,这是更多的工作。但是,回报的速度要快得多,并且解析不适合内存的大文件也没有问题。

答案 1 :(得分:0)

除了使用Sander建议的SAX,您可以尝试使用XmlPullParser,您可以找到更多信息here

答案 2 :(得分:0)

vtd-xml是此用例的最佳XML解析器。这是memory efficient and super fast ...这是一篇证明这一点的论文:

http://sdiwc.us/digitlib/journal_paper.php?paper=00000582.pdf