首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Android中解析大型XML文件

在Android中解析大型XML文件
EN

Stack Overflow用户
提问于 2010-11-11 22:29:49
回答 1查看 2.2K关注 0票数 2

我正试图解析一个相当大的XML文件-- 1MB+,但我遇到了一些困难。我首先尝试将xml文件添加到res/xml中,并使用XmlResourceParser解析它,但我得到了一个异常,它说“数据超过UNCOMPRESS_DATA_MAX”。经过一番研究,我发现在读取之前,压缩文件必须在内存中解压缩,并且这个限制不适用于原始文件。但是,当我试图用SAXParser从res/raw文件夹解析xml文件时,我得到了一个IOException,没有任何消息和堆栈跟踪:

代码语言:javascript
运行
复制
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的堆栈跟踪:

代码语言:javascript
运行
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2012-07-30 05:27:53

使用linux命令拆分-l 1 main.xml拆分您的文件

代码语言:javascript
运行
复制
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解析中的字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4159916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档