2010-10-12 28 views
1

除了内置的kXML解析器外,我正在寻找适用于Android的XML解析解决方案。我试图解析从服务器下载的大型(4MB +)XML文件,在解析时尝试分配1MB +字节数组后,kXML解析器会抛出OutOfMemory错误。一个好的流式XML解析器不应该分配这么大的数组!适用于Android的替代XML解析器实现

在Android中使用的kXML v2解析器似乎大约7岁。我想尝试其他方法来查看它是否修复了我的问题,理想情况是实现了相同的org.xmlpull.v1接口,因为我的代码已经写入了它。 Woodstox看起来不错,它有一个XMLPullParser适配器,但显然Android工程师正在使包含javax.xml.streaming库变得困难。我看到一些相当复杂的“jar-jar”变通方法,但是如果有更简单的方法,我宁愿不花费大量的时间来处理Ant。是否有其他人已经得到另一个XML拉解析器工作,并可以指向我?

回答

1

迄今为止发现的最佳解决方案是包含XmlPullParser的旧Javolution库。 Javolution pull解析器实际上并未实现org.xmlpull.v1.XmlPullParser,但它具有完全相同的方法签名,只不过它的方法返回CharSequence而不是String。这很容易通过将其包装到自制适配器中进行修复。

不幸的是,似乎Javolution拉解析器已被弃用,不能在最新版本的JAR中找到,但我发现,仍然有在这里一个较旧的JAR文件:http://download.osgeo.org/webdav/geotools/org/javolution/javolution/3.7.1/

而且事实证明我的问题是我的XML文件碰巧在其末尾包含超过1MB的0x00字符,而这些字符并不是合法的字符!但是,如果有人想尝试另一个解析器,我希望这可以帮助你。

1

在最坏的情况下,您可能会回到SAX,这是最有效的内存方法。虽然这是我的代码中的一个重大变化。

0

我打算使用StAX实现的源代码,您可以下载here。我刚刚发布了一个关于它的问题here。还有其他的实现。像Woodstox