XML解析(RSS阅读器)

例子中使用的种子是:http://news.163.com/special/00011K6L/rss_newstop.xml

一定要记得在Manifest里面加入Internet访问的允许


XMLParseActivity.java

package com.zeph.android.xml; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class XMLParseActivity extends Activity { private Button XmlParseButton; private String XmlSourceStr; private MyXmlHandler myXmlHandler; private List<RssNews> newsList; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); XmlParseButton = (Button) findViewById(R.id.XMLparseButton); XmlParseButton.setOnClickListener(new MyButtonClickListener()); newsList = new ArrayList<RssNews>(100); myXmlHandler = new MyXmlHandler(newsList); } public void XmlConnection(String urlStr) { URL url = null; try { url = new URL(urlStr); } catch (MalformedURLException e) { e.printStackTrace(); } if (url != null) { try { HttpURLConnection urlConnection = (HttpURLConnection) url .openConnection(); InputStreamReader isReader = new InputStreamReader( urlConnection.getInputStream(), "GBK"); BufferedReader br = new BufferedReader(isReader); StringBuffer sb = new StringBuffer(); String line = null; while ((line = br.readLine()) != null) { sb.append(line); } isReader.close(); urlConnection.disconnect(); XmlSourceStr = sb.toString(); } catch (IOException e) { e.printStackTrace(); } } } public void XmlParse() { try { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); XMLReader reader = parser.getXMLReader(); reader.setContentHandler(myXmlHandler); reader.parse(new InputSource(new StringReader(XmlSourceStr))); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public class MyButtonClickListener implements OnClickListener { @Override public void onClick(View view) { if (view == XmlParseButton) { XmlConnection("http://news.163.com/special/00011K6L/rss_newstop.xml"); XmlParse(); if (!newsList.isEmpty()) { Iterator<RssNews> it = newsList.iterator(); while (it.hasNext()) { RssNews news = (RssNews) it.next(); System.out.println(news.getTitle()); System.out.println(news.getPubDate()); System.out.println(news.getLink()); System.out.println("---------------------------------"); } } } } } }


MyXmlHandler.java

package com.zeph.android.xml; import java.util.List; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class MyXmlHandler extends DefaultHandler { private String XMLParseName; private List<RssNews> NewsList; private RssNews News; public MyXmlHandler(List<RssNews> NewsList) { this.NewsList = NewsList; } @Override public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length); String value = new String(ch, start, length); if (XMLParseName.equals("title")) { News.setTitle(value); } else if (XMLParseName.equals("link")) { News.setLink(value); } else if (XMLParseName.equals("description")) { News.setDescription(value); } else if (XMLParseName.equals("pubDate")) { News.setPubDate(value); } } @Override public void startDocument() throws SAXException { super.startDocument(); } /** * uri是命名空间 URI * localName是不带命名空间前缀的标签名 * qName是带命名空间前缀的标签名 * attributes可以得到所有的属性名和相应的值 * * @param */ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); if (localName.equals("title")) { News = new RssNews(); } XMLParseName = localName; } @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); if (localName.equals("item")) { NewsList.add(News); } } @Override public void endDocument() throws SAXException { super.endDocument(); } }


RssNews.java

package com.zeph.android.xml; public class RssNews { /** 新闻标题 **/ private String title; /** 新闻链接 **/ private String link; /** 新闻描述 **/ private String description; /** 新闻发表时间 **/ private String pubDate; public RssNews() { } public RssNews(String title, String link, String description, String pubDate) { super(); this.title = title; this.link = link; this.description = description; this.pubDate = pubDate; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getLink() { return link; } public void setLink(String link) { this.link = link; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getPubDate() { return pubDate; } public void setPubDate(String pubDate) { this.pubDate = pubDate; } }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值