解析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>
我的问题: 我怎么可以只选择与特定的“标签”,如项目。 ?标签=“第二个”
答
改写了一个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
取决于解析器界面。显示一些代码 –