//设置一个可以定位文档内容事件发生位置的定位器对象 public void setDocumentLocator(Locator locator) //用于处理文档解析开始事件 public void startDocument()throws SAXException //处理元素开始事件,从参数中可以获得元素所在名称空间的uri,元素名称,属性类表等信息 public void startElement(String namespacesURI , String localName , String qName , Attributes atts) throws SAXException //处理元素结束事件,从参数中可以获得元素所在名称空间的uri,元素名称等信息 public void endElement(String namespacesURI , String localName , String qName) throws SAXException //处理元素的字符内容,从参数中可以获得内容 public void characters(char[] ch , int start , int length) throws SAXException
//注册处理XML文档解析事件ContentHandler public void setContentHandler(ContentHandler handler) //开始解析一个XML文档 public void parse(InputSorce input) throws SAXException
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader reader = parser.getXMLReader();
RSSHandler handler = new RSSHandler(); reader.setContentHandler(handler);
parser.parse(is);
<?xml version="1.0" encoding="UTF-8"?>
<channel>
<title>RSS 解析练习</title>
<description>hehehaha</description>
<link>http://www.cnblogs.com/felix-hua/</link>
<language>zh-cn</language>
<item>
<title><![CDATA[头条]]></title>
<link>http://mc.cz001.com.cn/images/menu/23_active.png</link>
<category>0</category>
<description>描述详细信息的</description>
<pubDate>2012-01-09</pubDate>
</item>
<item>
<title><![CDATA[新闻]]></title>
<link>http://mc.cz001.com.cn/images/menu/23_active.png</link>
<category>0</category>
<description>描述详细信息的</description>
<pubDate>2012-01-09</pubDate>
</item>
<item>
<title><![CDATA[首页]]></title>
<link>http://mc.cz001.com.cn/images/menu/23_active.png</link>
<category>0</category>
<description>描述详细信息的</description>
<pubDate>2012-01-09</pubDate>
</item>
<item>
<title><![CDATA[财经]]></title>
<link>http://mc.cz001.com.cn/images/menu/23_active.png</link>
<category>0</category>
<description>描述详细信息的</description>
<pubDate>2012-01-09</pubDate>
</item>
package com.sax.org.entity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;
public class RSSFeed {
private String title;
private int itemcount;
private List<RSSItem> itemlist;
public RSSFeed(){
itemlist = new Vector<RSSItem>(0);
}
/**
* 负责将一个RSSItem加入到RSSFeed类中
* @param item
* @return
*/
public int addItem(RSSItem item){
itemlist.add(item);
itemcount++;
return itemcount;
}
public RSSItem getItem(int location){
return itemlist.get(location);
}
public List<RSSItem> getAllItems(){
return itemlist;
}
/**
* 负责从RSSFeed类中生成列表所需要的数据
* @return
*/
public List getAllItemForListView(){
List<Map<String, Object>> data = new ArrayList<Map<String,Object>>();
int size = itemlist.size();
for(int i=0 ; i<size ; i++){
HashMap<String , Object> item = new HashMap<String, Object>();
item.put(RSSItem.TITLE, itemlist.get(i).getTitle());
item.put(RSSItem.PUBDATE, itemlist.get(i).getPubdate());
data.add(item);
}
return data;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getItemcount() {
return itemcount;
}
public void setItemcount(int itemcount) {
this.itemcount = itemcount;
}
public List<RSSItem> getItemlist() {
return itemlist;
}
public void setItemlist(List<RSSItem> itemlist) {
this.itemlist = itemlist;
}
}
package com.sax.org.entity;
public class RSSItem {
public static String TITLE = "title";
public static String PUBDATE = "pubdate";
public String title;
public String description;
public String link;
public String category;
public String pubdate;
public RSSItem() {
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getPubdate() {
return pubdate;
}
public void setPubdate(String pubdate) {
this.pubdate = pubdate;
}
}
package com.sax.org.handler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.sax.org.entity.RSSFeed;
import com.sax.org.entity.RSSItem;
public class RSSHandler extends DefaultHandler{
RSSFeed RssFeed;
RSSItem RssItem;
final int RSS_TITLE = 1;
final int RSS_LINK = 2;
final int RSS_DESCRIPTION = 3;
final int RSS_CATEGORY = 4;
final int RSS_PUBDATE = 5;
int currentstate = 0;
public RSSHandler(){}
public RSSFeed getFeed(){
return RssFeed;
}
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
RssFeed = new RSSFeed();
RssItem = new RSSItem();
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
if(localName.equals("channel")){
currentstate = 0;
return;
}
if(localName.equals("item")){
RssItem = new RSSItem();
return;
}
if(localName.equals("title")){
currentstate = RSS_TITLE;
return;
}
if(localName.equals("description")){
currentstate = RSS_DESCRIPTION;
return;
}
if(localName.equals("link")){
currentstate = RSS_LINK;
return;
}
if(localName.equals("category")){
currentstate = RSS_CATEGORY;
return;
}
if(localName.equals("pubDate")){
currentstate = RSS_PUBDATE;
return;
}
currentstate = 0;
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
if(localName.equals("item")){
RssFeed.addItem(RssItem);
return;
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
String theString = new String(ch, start, length);
switch(currentstate){
case RSS_TITLE:
RssItem.setTitle(theString);
currentstate = 0;
break;
case RSS_DESCRIPTION:
RssItem.setDescription(theString);
currentstate = 0;
break;
case RSS_LINK:
RssItem.setLink(theString);
currentstate = 0;
break;
case RSS_PUBDATE:
RssItem.setPubdate(theString);
currentstate = 0;
break;
case RSS_CATEGORY:
RssItem.setCategory(theString);
currentstate = 0;
break;
default:
return;
}
}
}
package com.sax.org;
import java.io.IOException;
import java.net.URL;
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.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import com.sax.org.entity.RSSFeed;
import com.sax.org.entity.RSSItem;
import com.sax.org.handler.RSSHandler;
public class SAXReaderActivity extends Activity {
/** Called when the activity is first created. */
public String rssUrl = "http://mc.cz001.com.cn/a/indexconfig/index.rss";
public RSSFeed feed;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
feed = getFeed(rssUrl);
showList();
}
public RSSFeed getFeed(String rssUrl) {
try {
// 这里我们实现了本地解析,所以注掉了这个取网络数据的。
// URL url = new URL(rssUrl);
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader reader = parser.getXMLReader();
RSSHandler handler = new RSSHandler();
reader.setContentHandler(handler);
InputSource is = new InputSource(this.getClassLoader().getResourceAsStream("rssxml.xml"));//取得本地xml文件
reader.parse(is);
return handler.getFeed();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public void showList() {
ListView rsslistview = (ListView) findViewById(R.id.rssList);
TextView rsstitle = (TextView) findViewById(R.id.rsstitle);
if (feed == null) {
rsstitle.setText("访问失败...");
return;
}
SimpleAdapter adapter = new SimpleAdapter(this,
feed.getAllItemForListView(),
android.R.layout.simple_list_item_2, new String[] {
RSSItem.TITLE, RSSItem.PUBDATE }, new int[] {
android.R.id.text1, android.R.id.text2 });
rsslistview.setAdapter(adapter);
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有