Предпочтительный способ получения дочерних узлов XmlPullParser?

Каким будет предпочтительный способ получения дочерних узлов строки XML? Кажется, не хватает хороших примеров разбора с помощью XmlPullParser в android. Например, если я хочу разобрать это:

<Point>
    <Id>81216</Id>
    <Name>Lund C</Name>
</Point>

Я придумал способ, который выполняет эту работу:

List<Point> points = new ArrayList<Point>();
String id = null
name = null;

while (eventType != XmlPullParser.END_DOCUMENT) {
    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("Id")) {
        try {
            id = xpp.nextText();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("Name")) {
    try {
        name = xpp.nextText();
    } catch (Exception e) {
        e.printStackTrace();
    }
    else if(eventType == XmlPullParser.END_TAG && xpp.getName().equals("Point")) {
        Point point = new Point(id, name);
        points.add(point);
    }

    try {
        eventType = xpp.next();
    } catch (exception e) {
        e.printStackTrace();
    }
}

for (Point p : points) {
    tv.append(p.getId() + " | " + p.getName() + "\n");
}

Но выглядит действительно некрасиво. Есть ли лучший способ сделать это?


person Christer William Persson    schedule 21.07.2012    source источник
comment
кроме ужасного использования Exception.printStackTrace(), это довольно точно.   -  person jtahlborn    schedule 21.07.2012
comment
хехе, что в нем ужасного? Eclipse заставляет меня написать это? :)   -  person Christer William Persson    schedule 21.07.2012
comment
потому что, если вы получите исключение (что, скорее всего, означает, что синтаксический анализ xml завершился неудачно), вы 1. скорее всего, никогда не увидите его, так как консоль, вероятно, будет скрыта и 2. счастливо продолжите свой код, как будто ничего не произошло (вызовет больше проблем далее в коде). eclipse не заставляет вас писать это, eclipse заставляет вас иметь дело с этим. добавление e.printStackTrace() означает никогда не иметь с этим дело.   -  person jtahlborn    schedule 21.07.2012
comment
Имеет смысл. Спасибо :) Не занимался этим специально, так как это тоже выходило за рамки вопроса   -  person Christer William Persson    schedule 21.07.2012
comment
в таком случае было бы лучше его опустить.   -  person jtahlborn    schedule 21.07.2012


Ответы (1)


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

http://androidcookbook.com/Recipe.seam?recipeId=2217

getText() не будет генерировать исключения, потому что вы находитесь внутри зоны XmlPullParser.TEXT (поэтому текст точно есть).

Надеюсь, поможет!

person charlypu    schedule 21.07.2012