解析android中的特定rss订阅源

问题描述:

我试图解析rss订阅源在我的android应用程序。 和我的饲料中含有大量的与标签“标签”项目 的,它看起来像解析android中的特定rss订阅源

<item> 
<title> title </title> 
<link> link </link> 
<pubDate> date </pubDate> 
<description> description </description> 

<tags> 
<tag id="1">first</tag> 
<tag id="2">second</tag> 
<tag id="3">third</tag> 
</tags> 

</item> 

我的问题: 我怎么可以只选择与特定的“标签”,如项目。 ?标签=“第二个”

+0

取决于解析器界面。显示一些代码 –

改写了一个xml工厂类我有,它应该引领你在正确的轨道上

/** 
* 
* @author hsigmond 
* 
*/ 
public class RssXmlFactory { 

    public static ArrayList<RSSItem> parseResult(final String rssDataContent,String tag_id) throws ParserConfigurationException, 
      SAXException, IOException { 

     SAXParserFactory spf = SAXParserFactory.newInstance(); 
     SAXParser sp = spf.newSAXParser(); 
     XMLReader xr = sp.getXMLReader(); 

     public String mItemTagID=tag_id;//"2" 

     RSSItemsHandler parser = new RSSItemsHandler(); 
     xr.setContentHandler(parser); 
     StringReader sr = new StringReader(rssDataContent); 
     InputSource is = new InputSource(sr); 
     xr.parse(is); 

     return parser.mItemList; 

    } 

} 


class RSSItemsHandler extends DefaultHandler { 

    private StringBuilder mSb = new StringBuilder(); 
    public ArrayList<RSSItem> mItemList = new ArrayList<RSSItem>(); 
    public RSSItem mCurrentRssItem = null; 
    public String mItemTitle=""; 


    @Override 
    public void startElement(final String namespaceURI, final String localName, final String qName, 
      final Attributes atts) throws SAXException { 
     mSb.setLength(0); 

     if (localName.equals(XMLTag.TAG_RSS_ITEM_ROOT)) { 
      /** Get the rss item title attribute value */ 
      mItemTitle=atts.getValue(XMLTag.TAG_RSS_ITEM_TITLE); 
      //#TODO Log result 
     } 

     else if (localName.equals(XMLTag.TAG_RSS_ITEM_TAG_ROOT)) { 
     //This is where you check if the TAG equals id=2, did not have the time to check if it works yet, it's late... 
     if(atts.getValue(XMLTag.TAG_RSS_ITEM_TAG_ID).equalsIgnoreCase(mItemTagID)){//id="2" 
      mCurrentRssItem = new RSSItem(); 
      /** Set item title attribute value */ 
      mCurrentRssItem.title=mItemTitle; 
       //#TODO Log result 
      }  
     } 
    } 

    @Override 
    public void endElement(final String namespaceURI, final String localName, final String qName) throws SAXException { 

     if (localName.equals(XMLTag.TAG_RSS_ITEM_ROOT)) { 
      mItemList.add(mCurrentRssItem); 

     } else if (localName.equals(XMLTag.TAG_RSS_ITEM_TAG_ROOT)) { 
      mCurrentRssItem.tag = mSb.toString();   
     } 
    } 

    @Override 
    public void characters(final char[] ch, final int start, final int length) throws SAXException { 
     super.characters(ch, start, length); 
     mSb.append(ch, start, length); 
    } 
} 
} 

有关如何处理Android上的XML的详细信息请看这里:http://www.ibm.com/developerworks/opensource/library/x-android/index.html