2016-08-19 59 views
0

我感到困惑的是如何解析这个XML并转到下一个标签如何在android中解析这个xml文件 - XmlPullParser?

RSS - >频道 - >项目

这样结构的XML树,请帮我通过它。 在此先感谢。

link of xml file

<rss> 
<channel> 
    <item> 
     <link> </link> 
     <title> </title> 
    </item> 
</channel> 

Android的Java代码:

public class RssXmlParser { 
private static final String ns = null; 
public List<Entry> parse(InputStream in) throws XmlPullParserException, IOException { 
    try { 
     XmlPullParser parser = Xml.newPullParser(); 
     parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); 
     parser.setInput(in, null); 
     parser.nextTag(); 
     return readFeed(parser); 
    } finally { 
     in.close(); 
    } 
} 
private List<Entry> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException { 
    List<Entry> entries = new ArrayList<Entry>(); 

    parser.require(XmlPullParser.START_TAG, ns, "channel"); 

    while (parser.next() != XmlPullParser.END_TAG) { 
     if (parser.getEventType() != XmlPullParser.START_TAG) { 
      continue; 
     } 
     String name = parser.getName(); 
     if (name.equals("item")) { 
      entries.add(readEntry(parser)); 
     } else { 
      skip(parser); 
     } 
    } 
    return entries; 
} 


public static class Entry { 
    public final String url; 
    public final String title; 

    private Entry(String url,String title) { 
     this.url = url; 
     this.title=title; 
    } 
} 
private Entry readEntry(XmlPullParser parser) throws XmlPullParserException, IOException { 
    parser.require(XmlPullParser.START_TAG, ns, "item"); 
    String title = null; 
    String link = null; 
    while (parser.next() != XmlPullParser.END_TAG) { 
     if (parser.getEventType() != XmlPullParser.START_TAG) { 
      continue; 
     } 
     String name = parser.getName(); 
     if (name.equals("title")) { 
      title = readTitle(parser); 
     } else if (name.equals("link")) { 
      link = readLink(parser); 
     } else { 
      skip(parser); 
     } 
    } 
    return new Entry(link,title); 
} 
private String readTitle(XmlPullParser parser) throws IOException, XmlPullParserException { 
    parser.require(XmlPullParser.START_TAG, ns, "title"); 
    String title = readText(parser); 
    parser.require(XmlPullParser.END_TAG, ns, "title"); 
    return title; 
} 
private String readLink(XmlPullParser parser) throws IOException, XmlPullParserException { 
    String link = ""; 
    parser.require(XmlPullParser.START_TAG, ns, "link"); 
    link = readText(parser); 
    parser.require(XmlPullParser.END_TAG, ns, "link"); 
    return link; 
} 
private String readText(XmlPullParser parser) throws IOException, XmlPullParserException { 
    String result = ""; 
    if (parser.next() == XmlPullParser.TEXT) { 
     result = parser.getText(); 
     parser.nextTag(); 
    } 
    return result; 
} 

private void skip(XmlPullParser parser) throws XmlPullParserException, IOException { 
    if (parser.getEventType() != XmlPullParser.START_TAG) { 
     throw new IllegalStateException(); 
    } 
    int depth = 1; 
    while (depth != 0) { 
     switch (parser.next()) { 
      case XmlPullParser.END_TAG: 
       depth--; 
       break; 
      case XmlPullParser.START_TAG: 
       depth++; 
       break; 
     } 
    } 
} 
} 

link is here

+0

是拉解析的要求?知道难以使用和生成难以维护且难以维护的代码 –

回答

0

在此分析重复解析,直到事件结束的文件,当事件类型是开始标记然后检查愿望标记从那个0得到的值示例代码在这里获取what_tagyou_want标记中'Name'属性的值。

 int event = myparser.getEventType(); 
    while (event != XmlPullParser.END_DOCUMENT) 
    { 
     String name=myparser.getName(); 

     switch (event) 
     { 
      case XmlPullParser.START_TAG: 

       if(name.equals("What_tagyou_want")) 
       { 
        namexml= myparser.getAttributeValue(null,"Name")+" ";//get values from here 
       } 
        break; 

      case XmlPullParser.END_TAG: 

      break; 

      default: break; 
     }   
     event = myparser.next();      
    }