【问题标题】:xmlPullParser don't reach END_DOCUMENT eventTypexmlPullParser 未达到 END_DOCUMENT eventType
【发布时间】:2014-02-28 20:25:01
【问题描述】:

我在解析 xml 文件时遇到问题。解析时到达最终的结束标记,但永远不会遇到 END_DOCUMENT。这似乎是一个无限循环!但是,如果我将字符串结果更改为“Hello World!”,那就行了!!!

public void parseXMLData(String result) throws XmlPullParserException, IOException {
    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    factory.setNamespaceAware(true);
    factory.setFeature(XmlPullParser.FEATURE_PROCESS_DOCDECL, true);
    XmlPullParser xpp = factory.newPullParser();
    xpp.setInput( new StringReader ( result ) );
    int eventType = xpp.getEventType();

    String prefix = null, name = null, value = null;

    while (eventType != XmlPullParser.END_DOCUMENT) {

        switch(eventType) {
        case XmlPullParser.END_DOCUMENT: Log.i(TAG, "end document");
        break;
        case XmlPullParser.START_TAG : Log.i(TAG, "start tag"); Log.i(TAG, xpp.getName());
        break;
        case XmlPullParser.END_TAG : Log.i(TAG,"end tag"); Log.i(TAG, "end "+xpp.getName());
        break;
        case XmlPullParser.START_DOCUMENT : Log.i(TAG, "start document");
        break;
        case XmlPullParser.TEXT : Log.i(TAG, "text");
        break;
        case XmlPullParser.COMMENT:
        Log.i(TAG, "COMMENT");
        break;
        case XmlPullParser.DOCDECL:
        Log.i(TAG, "DOCDECL");
        break;
        case XmlPullParser.IGNORABLE_WHITESPACE:
        Log.i(TAG, "IGNORABLE_WHITESPACE");
        break;
        }
        eventType = xpp.next();
        Log.i(TAG, "next(): "+eventType);
    }

    Log.i(TAG, "Saiu do while");

    if(eventType == XmlPullParser.END_DOCUMENT) {
        Log.i(TAG, "end document");
    }


    showResults();
    //str_forecast = xpp.getText();


    Log.i(TAG, "Chamou showResults()");
    //return xpp.getText();
}

我的 XML 资源是http://weather.yahooapis.com/forecastrss?w=455823&u=c

谢谢

【问题讨论】:

  • 你有没有摆脱困境?
  • 仅适用于 "foo" xml 示例。

标签: android android-xmlpullparser


【解决方案1】:

那么它实际上在做什么,无限运行?如果它只是没有为END_DOCUMENT 案例打印出您的Log.i(),那是因为您已将while 循环设置为在遇到END_DOCUMENT 标记时立即退出。

【讨论】:

  • 它似乎无限运行!!,但是如果我通过一个简单的 xml 硬编码来更改字符串“结果”,它就可以工作了!!我认为问题出在雅虎提供的xml源中。
【解决方案2】:

尝试调用

eventType=xpp.next();

代替

eventType = xpp.nextToken();

【讨论】:

    猜你喜欢
    • 2020-06-22
    • 2015-09-20
    • 2023-03-05
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多