XmlPullParser是否需要针对2.3.3及更早版本的Android版本进行特殊处理?

时间:2012-11-24 08:08:25

标签: android xml-parsing android-2.2-froyo android-2.3-gingerbread xmlpullparser

我使用以下代码通过XmlPullParser从远程XML文件中提取内容:

    factory = XmlPullParserFactory.newInstance();
    factory.setNamespaceAware(true);
    parser = factory.newPullParser();
    parser.setInput(xml, "UTF-8");

    eventType = parser.getEventType();

    // process tag while not reaching the end of document
    while (eventType != XmlPullParser.END_DOCUMENT) {
        switch (eventType) {
            // at start of document: START_DOCUMENT
            case XmlPullParser.START_DOCUMENT:
                break;
            // at start of a tag: START_TAG
            case XmlPullParser.START_TAG:
                //get tag name
                String tagName = parser.getName();
                if (tagName.equalsIgnoreCase("item")) {
                    listObject = new MyClass();
                } else if (tagName.equalsIgnoreCase("yy")) {
                    listObject.setYY(parser.nextText());
                } else if (tagName.equalsIgnoreCase("zz")) {
                    listObject.setZZ(parser.nextText());
                } 
                break;
        }
        // jump to next event
        eventType = parser.next();

正如您所看到的,此代码中没有新的或奇怪的东西。

现在,当获取的XML内容在Android 3.0和更新的系统上出现在此解析器上时,它们看起来“正常”,就像在这张图片上一样:

您可以看到已正确获取XML文件的内容。

但是当我将同一个项目连接到Android 2.3.3或更早的设备时,我会得到不同结果!查看在Android 2.2设备上拍摄的相同图像。

你看到这些奇怪的字符\uoooo!此外,buffer项已更改为txtBuf

这一切意味着什么?为什么Android 2.3.3中会出现这种情况,以及如何解决这个问题?这打破了我的解析器并杀死了我的应用程序。

1 个答案:

答案 0 :(得分:0)

修改你的解析:

XmlPullParser xpp = XmlPullParserFactory.newInstance().newPullParser();
xpp.setInput(xml, "UTF-8");

while (xpp.getEventType() != XmlPullParser.END_DOCUMENT)
{
    if (xpp.getEventType() == XmlPullParser.START_TAG)
    {
        if (xpp.getName().equalsIgnoreCase("item"))
        {
            listObject = new MyClass();
        }
        else if (xpp.getName().equalsIgnoreCase("yy"))
        {
            listObject.setYY(parser.nextText());
        }
        else if (xpp.getName().equalsIgnoreCase("zz"))
        {
            listObject.setZZ(parser.nextText());
        }
    }
    else if(xpp.getEventType() == XmlPullParser.END_TAG)
    {
        listObject = null;
    }
    xpp.next();
}