Нужна ли XmlPullParser специальная обработка для 2.3.3 и более ранних версий Android?

Я извлекаю содержимое из удаленного XML-файла через XmlPullParser, используя такой код:

    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 ниже и как решить эту проблему? Это ломает мой парсер и убивает мое приложение.


person sandalone    schedule 24.11.2012    source источник
comment
Вы уверены, что не проанализированный контент будет одинаковым в версиях до и после версии 2.3?   -  person Alexander Kulyakhtin    schedule 24.11.2012
comment
@Alex Первый на Android 4.0.3, а второй на Android 2.2. Прошлой ночью я проверил на Android 2.3.3, и он был таким же, как и на Android 2.2. Я в отчаянии. Я не могу понять, что вызывает это?! PullParser, сервер или что-то еще?   -  person sandalone    schedule 24.11.2012
comment
Может быть, это поможет, если вы разберете тот же файл, но поместите его локально в актив, просто чтобы убедиться, что это не проблема с http.   -  person Alexander Kulyakhtin    schedule 24.11.2012
comment
@Alex Я также заметил, что URL-адрес XML-файла заканчивается не file.xml, а file.ashx. Вероятно, это серверный скрипт ASP.NET, который генерирует XML. Это вызывает проблему?   -  person sandalone    schedule 24.11.2012
comment
@Alex Локально РАЗБИРАЕТСЯ БЕЗ проблем. Какие-либо предложения?   -  person sandalone    schedule 24.11.2012


Ответы (1)


Измените свой синтаксический анализ:

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();
}
person Artyom Kiriliyk    schedule 24.11.2012
comment
Хм, что именно ты здесь делал? Кажется, вы убрали осведомленность о пространстве имен и лучше справились с недостатком. - person sandalone; 26.11.2012