2016-08-19 5 views
0

は、私がどのようにこのXMLを解析し、次のタグにandroidでこのxmlファイルを解析する方法 - XmlPullParser?

RSSに行くことに混乱しています - >チャンネル - >項目が

このような構造のXMLツリーが、私はそれを助けてください。 ありがとうございます。

link of xml file

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

アンドロイド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

イベントまで解析が終了する文書であり、イベントタイプが開始タグであるとき、リピートその欲望をチェックし、その値から値を取得するサンプルコードは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();      
    } 
関連する問題