解析Android中的大型XML文件
问题描述:
我想解析一个相当大的XML文件 - 1MB +,但我遇到了一些困难。 我首先尝试将xml文件添加到res/xml中,并使用XmlResourceParser解析它,但我得到一个异常说“数据超出UNCOMPRESS_DATA_MAX”。经过一番研究后,我发现压缩文件在读取之前必须在内存中解压缩,并且此限制不适用于原始文件。 但是试图解析从资源xml文件/原始文件夹与SAXParser的时候,我得到一个IOException,没有任何消息和堆栈跟踪:解析Android中的大型XML文件
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
xr.setContentHandler(myXMLHandler);
InputSource src = new InputSource(stream);
xr.parse(src); // IOException
从我了解的内存限制并不适用于原料资源,但是什么导致了这个异常呢?
这里是logcat的堆栈跟踪:
11-11 23:47:50.729: WARN/System.err(4886): java.io.IOException
11-11 23:47:50.739: WARN/System.err(4886): at android.content.res.AssetManager.readAsset(Native Method)
11-11 23:47:50.749: WARN/System.err(4886): at android.content.res.AssetManager.access$800(AssetManager.java:36)
11-11 23:47:50.759: WARN/System.err(4886): at android.content.res.AssetManager$AssetInputStream.read(AssetManager.java:542)
11-11 23:47:50.759: WARN/System.err(4886): at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:504)
11-11 23:47:50.769: WARN/System.err(4886): at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:467)
11-11 23:47:50.779: WARN/System.err(4886): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:329)
11-11 23:47:50.790: WARN/System.err(4886): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:286)
答
分割使用这个linux命令您的文件拆分-11 main.xml中
private String readTxt()
{
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
for(int J=1;J<15;J++)
{
int i;
try
{
InputStream raw = this.getAssets().open("xa"+J);
i = raw.read();
while (i != -1)
{
byteArrayOutputStream.write(i);
i = raw.read();
}
raw.close();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
用作串到你的SAX解析。
请寄出logcat的输出。如果没有至少获得logcat错误级别输出,则不可能引发异常。 – 2010-11-11 22:39:34
我复制logcat的输出。 – Krassi 2010-11-11 22:50:35
您是否尝试过使用XML Mikpa 2010-11-14 22:24:02