Способ анализа XML (org.w3c.Document) на Android

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

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

Ответ 1

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

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

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

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

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

Ответ 2

Здесь статья на сайте 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 class, а затем вызовите метод setInput().

Ответ 3

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

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

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

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