2015-11-18 5 views
0

Я хочу анализировать тег title и link только в разделе раздела с XMLpullparser. как его разобрать, игнорируя предыдущий заголовок и тег ссылки?Как разобрать вложенный тег с тем же именем, используя XMLpullparser в android

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

ответ

1

Я не знаю его права погоду способ сделать это, но то, что я сделал это в случае XmlPullParser.START_TAG: если он нашел предмет тег, ив набор счетчик равен 1. а в случае XmlPullParser.END_TAG: если counter! = 0, то только он добавляет значение объекту. Этот метод работает. если кто-то знает более точный способ, пожалуйста, напишите. Благодарю.

0

Существует одна библиотека, доступная для разбора XML-ответа на класс POJO. https://github.com/stanfy/gson-xml

С помощью этой библиотеки вам не нужно выполнять ручную разборку. Вам нужно создать класс POJO в соответствии с вашим xml.

Для данной 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); 
}