使用XmlPullParserFactory在android中解析Xml

时间:2014-07-10 17:01:29

标签: android xml parsing xml-parsing xmlpullparser

<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。由于每个节点都被命名为相同的&#34;跟踪&#34;我不知道如何解析这个xml。我想在变量中解析和存储与每个事件名称(在这种情况下为第一,第二,第三,第四和第五)相对应的URL。我正在使用XMLPullParser,并且通过使用

,这个xml解析的其他部分很简单
if(myparser.getName().equalsIgnoreCase("tagname")){
                        //do something
                     }

如果节点具有相同的名称但不同的事件类型,我不知道如何解析。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分: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);
    }
}

这不是完美的,但应该得到一个轨道列表,每个轨道都有各自的网址和事件。