Может ли кто-нибудь указать мне на объяснение или объяснить мне, как я могу легко разобрать XML и получить значения w3c.Document на Android, используя только ОС Android Libs?
Я попытался использовать реализацию dom4j, но он очень медленный: - (
Может ли кто-нибудь указать мне на объяснение или объяснить мне, как я могу легко разобрать XML и получить значения w3c.Document на Android, используя только ОС Android Libs?
Я попытался использовать реализацию dom4j, но он очень медленный: - (
Вы должны окончательно использовать предоставленные 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.
Здесь статья на сайте 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()
.
Мы также можем использовать XPath в XML XML Parsing Things..
Это полезно, когда вы собираетесь разбирать много данных в форме массива.
Обратите внимание на Ссылка для учебного пособия XPath при анализе XML-контента с Android.
Наслаждайтесь!