1.创建针对目标XML的Handler,解析操作类。
/**
* SAX解析器handler
*
* @author dpjiangyb
*
*/
private class NewsListContentHandler extends DefaultHandler {
// tag name
private String tagName = null;
//object list
private List<NewsUnit> newsInfos = null;
//object item
private NewsUnit newsInfo = null;
public NewsListContentHandler(List<NewsUnit> newsInfos) {
super();
this.newsInfos = newsInfos;
}
@Override
public void startDocument() throws SAXException {
Log.i("jerry", "开始解析东风新闻数据 ... ");
super.startDocument();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// element start
tagName = localName;
if (tagName.equals("resource")) {
// create object to store
newsInfo = new NewsUnit();
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// parse the element content
String tmp = new String(ch, start, length);
if (tagName.equals("name")) {
// save the value
newsInfo.setName(tmp);
} else if (tagName.equals("content")) {
// save the value
newsInfo.setContent(tmp);
}
}
@Override
public void endDocument() throws SAXException {
Log.i("jerry", "东风新闻数据解析完毕 ... ");
super.endDocument();
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// the element end
tagName = localName;
if (tagName.equals("resource")) {
// add the object to the list
newsInfos.add(newsInfo);
}
// make sure to set tagName's value to "".
tagName = "";
}
}
2.在程序中调用SAX解析
public List<NewsUnit> parseXml(String xml) {
// 创建SAXParserFactory解析器工厂
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
List<NewsUnit> newsInfos = null;
NewsUnit newsInfo = null;
// 创建XMLReader对象,xml文件解析器
try {
XMLReader xmlReader = parserFactory.newSAXParser().getXMLReader();
// 注册内容事件处理器(设置xml文件解析器的解析方式)
xmlReader.setContentHandler(new NewsListContentHandler(newsInfos));
// 开始解析xml格式文件
xmlReader.parse(new InputSource(new StringReader(xml)));
//处理解析完成后的集合
// for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) {
// mp3Info = (Mp3Info) mp3Infos.iterator();
// }
// mp3Infos.add(mp3Info);
} catch (Exception e) {
e.printStackTrace();
}
return newsInfos;
}