【问题标题】:Android XML Parsing(XmlPullParser) - cant retrieve text from XMLAndroid XML Parsing(XmlPullParser) - 无法从 XML 中检索文本
【发布时间】:2012-09-13 05:53:20
【问题描述】:

问题:XML解析返回空指针异常,无法从xml中的program标签中检索到文本。单步执行代码显示: (这是来自调试语句,如下代码所示)

err StartTag entry
err StartTag record
err Text 4

调用解析器的行(也是导致空指针的行,pail 是一个新创建的容器):

pail = XmlParsee.parsee(getResources().openRawResource(R.raw.testprogramlist));         

我的 XML 文件:

<entry>
    <record>
        <program>Program 1(English)</program>
    </record>
    <record>
        <program>Program 2(Mandarin)</program>
    </record>
</entry>

我的解析器(我尝试了 getText() 和 nextText(),都返回相同的问题):

public class XmlParsee {
// jealousy has invaded! Generic xml parser that returns a container
public static Container parsee(InputStream inputriver) {
    Container container = null;

    try {
        // get new parser object from factory
        XmlPullParser parsee = XmlPullParserFactory.newInstance().newPullParser();
        parsee.setInput(inputriver, null);

        int eventType = parsee.getEventType();
        // while xml still has more, we read.

        while (eventType != XmlPullParser.END_DOCUMENT) {
            switch (eventType) {
                case XmlPullParser.START_DOCUMENT: {
                    //these comments to be replaced with logging functions, if you desire
                    //wokay, we begin
                    container = new Container();
                    System.err.println("doc start");
                    break;
                }
                case XmlPullParser.END_DOCUMENT:{
                    //wokay, we end.
                    break;
                }
                case XmlPullParser.START_TAG:{
                    //new tag! first we get the tag's name
                    String tag = parsee.getName();
                    System.err.println("StartTag "+parsee.getName());
                    //then we check, individually, what the tag is to confirm content
                    //if <program>
                    if(tag.equalsIgnoreCase(Container.PROGRAM)){
                        System.err.println("Text "+parsee.TEXT);
                        //container.addProgramList(parsee.getText());
                    }
                    //if <>                     
                    break;
                }
            }
            //done with this line, next!
            eventType = parsee.next();
        }
    } catch (Exception e) {
        container = null;
    }

    return container;
}

有什么想法吗?从早上开始我就一直在敲我的头=\

【问题讨论】:

    标签: android xml-parsing


    【解决方案1】:

    nextText() 对我有用;

        //System.err.println("Text "+parsee.TEXT);
        System.err.println("Text "+parsee.nextText());
    

    输出:

    ...
    09-13 14:51:22.035: W/System.err(12080): doc start
    09-13 14:51:22.035: W/System.err(12080): StartTag entry
    09-13 14:51:22.045: W/System.err(12080): StartTag record
    09-13 14:51:22.065: W/System.err(12080): StartTag program
    09-13 14:51:24.285: W/System.err(12080): Text Program 1(English)
    09-13 14:56:57.505: W/System.err(12080): StartTag record
    09-13 14:56:57.515: W/System.err(12080): StartTag program
    09-13 14:56:58.075: W/System.err(12080): Text Program 2(Mandarin)
    ...
    

    问候

    陈子腾

    【讨论】:

    • 好吧,我的错。识别出错误的错误位置。现在觉得有点傻。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多