例子中使用的种子是: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;
}
}