如何使用android中的XMLpullparser解析具有相同名称的嵌套标记

时间:2015-11-18 07:05:56

标签: android xmlpullparser

我想仅使用XMLpullparser解析项目部分中的标题和链接标记。如何解析它忽略以前的标题和链接标记?

<channel>
 <title>AAA</title>
 <link>linkone</link>
 <item>
  <title>BBB</title>
  <link>link2</link>
 </item>
</channel>

我正在使用的解析器正在关注。如何忽略起始标题和链接标记?

try {
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        XmlPullParser xpp = factory.newPullParser();

        FileInputStream fis = ctx.openFileInput("StackSites.xml");
        BufferedReader reader = new BufferedReader(new InputStreamReader(fis));

        xpp.setInput(reader);

        int eventtype = xpp.getEventType();
        while (eventtype != XmlPullParser.END_DOCUMENT){
            String tagname = xpp.getName();

            switch (eventtype){
                case XmlPullParser.START_TAG:
                    if(tagname.equalsIgnoreCase("item")){
                        curStackSite = new StackSite();
                    }
                    break;

                case  XmlPullParser.TEXT:
                    curText = xpp.getText();
                    break;

                case XmlPullParser.END_TAG:
                    if(tagname.equalsIgnoreCase("item")){
                        stackSites.add(curStackSite);
                    }
                    if(tagname.equalsIgnoreCase("title")){
                        curStackSite.setName(curText);
                    }
                    if(tagname.equalsIgnoreCase("link")){
                        curStackSite.setLink(curText);
                    }
                    break;
                default:
                    break;
            }
            eventtype = xpp.next();
        }

2 个答案:

答案 0 :(得分:1)

我不知道这是做正确的方法,但我所做的就是内部情况XmlPullParser.START_TAG:如果找到了项目标签,我设置的计数器等于1.如果是XmlPullParser.END_TAG:if counter!= 0,然后只为它增加对象的值。这个方法有效。如果有人知道更准确的方式请发布。感谢。

答案 1 :(得分:0)

有一个库可用于解析对POJO类的xml响应。 https://github.com/stanfy/gson-xml

通过使用此库,您无需进行手动解析。您需要根据您的xml创建POJO类。

对于给定的xml,您需要创建两个POJO类

Channel.java

public class Channel {
    Item item;
}

Item.java

public class Item {
    String title;
    String link;
}

现在你可以解析你的xml,如下所示

public void parseXml(Strng xml){
    XmlParserCreator parserCreator = new XmlParserCreator() {
            @Override
            public XmlPullParser createParser() {
                try {
                    return   XmlPullParserFactory.newInstance().newPullParser();
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
        }
    };

    GsonXml gsonXml = new GsonXmlBuilder().setXmlParserCreator(parserCreator).create();

    Channel channel = gsonXml.fromXml(xml, Channel.class);
    Log.v("temp", "Title : " + channel.item.title);
}