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

How to parse Nested tag with same name using XMLpullparser in android

我只想使用 XMLpullparser 解析项目部分中的标题和 link 标签。我如何通过忽略以前的标题和 link 标签来解析它?

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

我目前使用的解析器如下。如何忽略起始标题和 link 标签?

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();
        }

我不知道这样做的正确方法,但我所做的是在案例中 XmlPullParser.START_TAG:如果找到项目标签,我将计数器设置为 1。如果 XmlPullParser.END_TAG:如果计数器!= 0,那么只有它会增加对象的价值。这个方法有效。如果有人知道更准确的方法,请post。谢谢。

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

使用本库,您无需手动解析。您需要根据您的 xml.

创建 POJO class

对于给定的xml,你需要创建两个POJO classes

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);
}