在一般使用中为了简化开发,在org.xml.sax.helpers提供了一个DefaultHandler类,它实现了ContentHandler的方法,我们只想继承DefaultHandler方法即可。
另外SAX解析器提供了一个工厂类:SAXParserFactory,SAX的解析类为SAXParser 可以调用它的parser方法进行解析。
看了些基础以后开始上代码吧(核心代码,下载代码在附件)
public class SAXPraserHelper extends DefaultHandler {
final int ITEM = 0x0005;
List<channel> list;
channel chann;
int currentState = 0;
public List<channel> getList() {
return list;
}
/*
* 接口字符块通知
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
// super.characters(ch, start, length);
String theString = String.valueOf(ch, start, length);
if (currentState != 0) {
chann.setName(theString);
currentState = 0;
}
return;
}
/*
* 接收文档结束通知
*/
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
}
/*
* 接收标签结束通知
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
if (localName.equals("item"))
list.add(chann);
}
/*
* 文档开始通知
*/
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
list = new ArrayList<channel>();
}
/*
* 标签开始通知
*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
chann = new channel();
if (localName.equals("item")) {
for (int i = 0; i < attributes.getLength(); i++) {
if (attributes.getLocalName(i).equals("id")) {
chann.setId(attributes.getValue(i));
} else if (attributes.getLocalName(i).equals("url")) {
chann.setUrl(attributes.getValue(i));
}
}
currentState = ITEM;
return;
}
currentState = 0;
return;
}
}
private List<channel> getChannelList() throws ParserConfigurationException, SAXException, IOException
{
//实例化一个SAXParserFactory对象
SAXParserFactory factory=SAXParserFactory.newInstance();
SAXParser parser;
//实例化SAXParser对象,创建XMLReader对象,解析器
parser=factory.newSAXParser();
XMLReader xmlReader=parser.getXMLReader();
//实例化handler,事件处理器
SAXPraserHelper helperHandler=new SAXPraserHelper();
//解析器注册事件
xmlReader.setContentHandler(helperHandler);
//读取文件流
InputStream stream=getResources().openRawResource(R.raw.channels);
InputSource is=new InputSource(stream);
//解析文件
xmlReader.parse(is);
return helperHandler.getList();
}










