Способ разбора XML (org.w3c.Document) на Android - PullRequest
10 голосов
/ 18 декабря 2009

Может ли кто-нибудь указать мне объяснение или объяснить, как мне легко разобрать XML и получить значения w3c.Document на Android, используя только ОС Android OS Libs?

Я пытался использовать реализацию dom4j, но она очень медленная: - (

Ответы [ 3 ]

15 голосов
/ 18 декабря 2009

Вот статья на Developer.com , сравнивающая производительность парсеров DOM, SAX и Pull на Android. Он обнаружил, что DOM-анализатор является самым медленным, а затем Pull-анализатор и SAX-анализатор - самыми быстрыми в своем тесте.

Если вы собираетесь много анализировать в своем приложении, возможно, стоит сравнить различные варианты, чтобы увидеть, какой из них лучше для вас.

Я использовал XmlPullParser через XmlResourceParser и обнаружил, что он хорошо работает и прост в использовании.

Он работает через возвращающие XML-события, сообщающие вам, что там находится.

Если вы используете его, ваш код будет выглядеть примерно так:

XmlResourceParser parser = context.getResources().getXml(R.xml.myfile);

try {
    int eventType = parser.getEventType();

    while (eventType != XmlPullParser.END_DOCUMENT) {
        String name = null;

        switch (eventType){
            case XmlPullParser.START_TAG:
                name = parser.getName().toLowerCase();

                if (name.equals(SOME_TAG)) {
                    for (int i = 0;i < parser.getAttributeCount();i++) {
                        String attribute = parser.getAttributeName(i).toLowerCase();

                        if (attribute.equals("myattribute")) {
                            String value = parser.getAttributeValue(i);
                        }

                    }
                }

                break;
            case XmlPullParser.END_TAG:
                name = parser.getName();
                break;
        }

        eventType = parser.next();
    }
}
catch (XmlPullParserException e) {
    throw new RuntimeException("Cannot parse XML");
}
catch (IOException e) {
    throw new RuntimeException("Cannot parse XML");
}
finally {
    parser.close();
}

Если вы хотите проанализировать XML, который находится не в файле ресурсов, вы можете создать новый XmlPullParser, используя XmlPullParserFactory класс , а затем вызвать метод setInput() .

11 голосов
/ 18 декабря 2009

Вы должны окончательно использовать предоставляемые SAX API. API-интерфейс синтаксического анализа в Android XML укладывается поверх обычного Java SAX, так что, на мой взгляд, я бы просто использовал обычный Java SAX API, и таким образом вы получите возможность тестировать свой код как обычный рабочий стол Java.

Синтаксический анализ XML всегда происходит медленно, и использование этих SAX-парсеров не вызывает нареканий (если вы не пишете собственный анализатор с нуля). Совет: постарайтесь свести к минимуму сравнение строк и использовать хеш-таблицы вместо длинных цепочек if (token.isEqual (CONSTANT_TOKEN));;

Вот несколько примеров синтаксического анализа Java XML: http://java.sun.com/developer/codesamples/xml.html#sax

API Android XML декларативен, парадигма немного отличается, поэтому, если вы решите пойти по этому пути, будьте готовы прочитать несколько примеров, чтобы узнать, как это сделать.

Наконец, может быть, 2 месяца назад я видел сравнительный анализ DOM против SAX и Android XML API (сейчас я не могу найти ссылку). Был сделан вывод, что DOM был самым медленным, а SAX был лучшим, но не с огромным преимуществом по сравнению с XML-реализацией Android.

1 голос
/ 06 августа 2012

Мы также можем использовать XPath в Android XML Tharsing Things ..

Это полезно, когда вы собираетесь анализировать много данных в виде массива.

Ознакомьтесь с этой ссылкой для учебника по XPath при разборе XML-контента с Android.

Наслаждайтесь !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...