Разбор Xml в Android с использованием XmlPullParserFactory

<MyEvents>
<Tracking event="first">
<![CDATA[
http://www.myurl.com/test1
]]>
</Tracking>
<Tracking event="second">
<![CDATA[
http://www.myurl.com/test2
]]>
</Tracking>
<Tracking event="third">
<![CDATA[
http://www.myurl.com/test3
]]>
</Tracking>
<Tracking event="fourth">
<![CDATA[
http://www.myurl.com/test4
]]>
</Tracking>
<Tracking event="fifth">
<![CDATA[
http://www.myurl.com/test5
]]>
</Tracking>
</MyEvents>

У меня есть этот xml, который мне нужно проанализировать и сохранить. Поскольку каждый узел называется одним и тем же «Отслеживание», я не знаю, как разобрать этот xml. Я хочу проанализировать и сохранить URL-адреса, соответствующие именам каждого события (в данном случае первое, второе, третье, четвертое и пятое) в переменных. Я использую XMLPullParser, и для других частей этого синтаксического анализа xml было просто использовать

if(myparser.getName().equalsIgnoreCase("tagname")){
                        //do something
                     }

в случае узла с тем же именем, но разными типами событий я не знаю, как анализировать. Любая помощь приветствуется.


person D'yer Mak'er    schedule 10.07.2014    source источник
comment
Похоже, вам просто нужно изучить атрибуты обработки и фильтровать их с помощью вашего парсера.   -  person Jay Snayder    schedule 10.07.2014
comment
Взгляните на метод getAttributeValue.   -  person Rajesh    schedule 10.07.2014
comment
if(parser.getAttributeValue(second,null) != null) { // сделать что-то } что-то вроде этого?   -  person D'yer Mak'er    schedule 10.07.2014


Ответы (1)


Во-первых, вы можете объявить внутренний класс следующим образом:

static class Track {
    String event;
    String url;
}

Затем код разбора:

List<Track> allTracks = new ArrayList<Track>();

myparser.require(XmlPullParser.START_TAG, null, "MyEvents");
while (myparser.next() != XmlPullParser.END_TAG) {
    if (myparser.getEventType() != XmlPullParser.START_TAG) {
        continue;
    }
    String name = myparser.getName();
    if (name.equals("Tracking ")) {
        String event = myparser.getAttributeValue(0); // I'm supposing that there is just one
        myparser.require(XmlPullParser.START_TAG, null, "Tracking ");
        String url = null;
        if (myparser.next() == XmlPullParser.TEXT) {
            url = parser.getText();
            myparser.nextTag();
        }
        Track track = new Track();
        track.event = event;
        track.url = url;
        allTracks.add(track);
    }
}

Это не идеально, но должен получить список треков, каждый со своим URL-адресом и событием.

person Plinio.Santos    schedule 10.07.2014
comment
Большое спасибо за вашу своевременную помощь и фрагмент. это очень помогло. - person D'yer Mak'er; 11.07.2014