XML Pull解析器资产XML

10

如何使用pull解析器解析位于assets文件夹中的本地XML文件?我无法使pull解析器正常工作,它总是抛出一个IO异常。我认为我可能无法获取文件路径或连接到文件。


你会考虑使用除了Pull之外的解析器吗? - vtd-xml-author
1个回答

23

mixm,

我一直在尝试各种方法从“assets”和“res”中加载本地文件,但为了回答你所问的问题(因为似乎没有其他人这样做),首先,请确保在测试之前XML是有效的,或者关闭验证,您可以同时执行此操作并实例化一个Pull解析器:

    try {
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        factory.setValidating(false);
        XmlPullParser myxml = factory.newPullParser();

然后打开XML文件,并将其设置为您的拉解析器的输入:

        InputStream raw = getApplicationContext().getAssets().open("simple.xml");
        myxml.setInput(raw, null);

现在设置你的拉取循环(或其他方式,这取决于你是否想要进行延迟拉取,这是你的设计决策):

        int eventType = myxml.getEventType();
        while(eventType != XmlPullParser.END_DOCUMENT) {
            if(eventType == XmlPullParser.START_DOCUMENT) {

                Log.d(MY_DEBUG_TAG, "In start document");
            }
            else if(eventType == XmlPullParser.START_TAG) {
                Log.d(MY_DEBUG_TAG, "In start tag = "+myxml.getName());
            }
            else if(eventType == XmlPullParser.END_TAG) {
                Log.d(MY_DEBUG_TAG, "In end tag = "+myxml.getName());

            }
            else if(eventType == XmlPullParser.TEXT) {
                Log.d(MY_DEBUG_TAG, "Have text = "+myxml.getText());
            }
            eventType = myxml.next();
        }
    } catch (XmlPullParserException e) {

注意myxml.getEventType(),需要执行此操作以启动解析并处理正在提取的事件类型。 注意:为了更易读而省略了catch块。

已在2.1上测试以上内容,希望对您有所帮助。 -Frank


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接