代码之家  ›  专栏  ›  技术社区  ›  D'yer Mak'er

使用XmlPullParserFactory在android中分析Xml

  •  0
  • D'yer Mak'er  · 技术社区  · 12 年前
    <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
                         }
    

    对于具有相同名称但不同事件类型的节点,我不知道如何解析。感谢任何帮助。

    1 回复  |  直到 12 年前
        1
  •  1
  •   Plinio.Santos    12 年前

    首先,可以这样声明一个内部类:

    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和事件。