URL url = new URL(urlString); SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); XMLReader xmlReader = parser.getXMLReader();
//RssHandler:XML 节点读取方式实现 RssHandler rssHandler = new RssHandler(); xmlReader.setContentHandler(rssHandler); InputSource inputSource = new InputSource(url.openStream()); xmlReader.parse(inputSource); return rssHandler.getRssFeed();
RssHandler 帮助类
public class RssHandler extends DefaultHandler { //多个Item集合 RSSFeed rssFeed ; //单个Item实例 RssItem rssItem; CurrentState currentState = CurrentState.None; public RssHandler(){} public RSSFeed getRssFeed(){ return this.rssFeed; } public void startDocument()throws SAXException { this.rssFeed = new RSSFeed(); this.rssItem = new RssItem(); } public void startElement(String _URI,String localName,String qNameString,Attributes atts)throws SAXException { if(localName.equals("channel")){ currentState = CurrentState.None; } else if(localName.equals("item")){ this.rssItem = new RssItem(); } else if(localName.equals("title")){ currentState = CurrentState.TITLE; } else if(localName.equals("description")){ currentState = CurrentState.DESCRIPTION; } else if(localName.equals("link")){ currentState = CurrentState.LINK; } else if(localName.equals("category")){ currentState = CurrentState.CATEGORY; } else if(localName.equals("pubDate")){ currentState = CurrentState.PUBDATE; } } public void endElement(String _URI,String localName,String qName)throws SAXException { if(localName.equals("item")){ this.rssFeed.addItem(this.rssItem); } } public void characters(char ch[],int start,int length) { String theString = new String(ch,start,length); switch (currentState) { case TITLE: this.rssItem.title(theString); currentState = CurrentState.None; break; case LINK: this.rssItem.link(theString); currentState = CurrentState.None; break; case DESCRIPTION: this.rssItem.description(theString); currentState = CurrentState.None; break; case CATEGORY: this.rssItem.category(theString); currentState = CurrentState.None; break; case PUBDATE: this.rssItem.publicDate(theString); currentState = CurrentState.None; break; default: break; } } /* * 节点枚举 */ public enum CurrentState{ /* * 无 */ None, TITLE, LINK, DESCRIPTION, CATEGORY, PUBDATE } }