Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android应用程序中解析来自webservice的巨大xml数据?_Android_Xml Parsing - Fatal编程技术网

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

如何在Android应用程序中解析来自webservice的巨大xml数据?,android,xml-parsing,Android,Xml Parsing,我是Android应用程序开发新手 我正在开发一个需要调用.NETWebService并解析XML数据的应用程序。当我解析普通XML数据时,它与DOM解析器一起工作。但是,当XML数据很大时,就会抛出“内存不足错误” Android中是否有其他解析器可用于解析巨大的XML数据 请帮助我或建议我 我真的需要这个尽快。使用。SAX解析器设计用于处理巨大的XML文件。它不是一次性将XML文件加载到内存中,而是逐个元素遍历文档元素并通知您 此外,如果XML文件非常大,您可能还需要查看文件的加载方式。不要

我是Android应用程序开发新手

我正在开发一个需要调用.NETWebService并解析XML数据的应用程序。当我解析普通XML数据时,它与DOM解析器一起工作。但是,当XML数据很大时,就会抛出“内存不足错误”

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

请帮助我或建议我

我真的需要这个尽快。

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

此外,如果XML文件非常大,您可能还需要查看文件的加载方式。不要一次打开文件并将全部内容输入SAX解析器。相反,逐块读取它(例如,一次读取4Kb块),并将其输入SAX解析器

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

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

  • 它可以解析部分XML。它不关心您是否只输入XML文件的前4KB。它不会生成错误,只是在完成后请求另一个块数据。只有当它遇到不匹配的结束标记时(或者您过早地停止向它提供数据),它才会生成错误


所以,是的,这是更多的工作。但是,这样做的好处是速度更快,而且解析不适合内存的大型文件也没有问题。

除了按照Sander的建议使用SAX之外,您还可以尝试使用
XmlPullParser
您可以找到更多信息vtd xml是此用例的最佳xml解析器。两者都是。。。以下是一篇证明这一点的文章:


谢谢您的评论。但是,使用具有许多列的SAX解析器进行解析是否容易?我在一个API中有40列,有20个类似的API。。这样容易吗?我不知道怎么一块一块地做?在我看来,如果我们只存储4kb,那么它会存储为完整的xml文件吗?没有缺少结束标记?请帮助我…我更新了我的答案以回应你的评论。