/*
xml一共有三种解析放方法
①DOM解析
②SAX解析
③Android内置的Pull解析
*/
//第一种
②SAX解析
SAX解析XML文档采用事件驱动模式。什么是事件驱动模式?
它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理。
//新建一个工厂类SAXParserFactory
SAXParserFactory factory = SAXParserFactory.newInstance();
//让工厂类产生一个SAX的解析类SAXParser
SAXParser newSAXParser = factory.newSAXParser();
//实例化SaxHandlerBase
SaxHandlerBase saxHandlerBase = new SaxHandlerBase();
//调用解析类方法
newSAXParser.parse(getAssets().open("languages.xml"),saxHandlerBase);
List<Books> list = saxHandlerBase.getList();
for (Books books : list) {
Log.i(tag,books.toString());
}
listView.setAdapter(new ArrayAdapter<Books>(this,android.R.layout.simple_dropdown_item_1line, list));
//写一个类继承SaxHandlerBase extends DefaultHandler
/*
里面重写五个方法 注意集合数据建立一个集合的get方法方便调用
*/
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
list=new ArrayList<Books>();
Log.i(tag,"*************开始解析文档**************");
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
name=qName;
Log.i(tag,"*************开始解析--元素**************");
if (qName.equals("item")) {
books=new Books();
books.setId(attributes.getValue("id"));
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
String string = new String(ch, start, length);
if (!string.trim().equals("")) {
Log.i(tag,"*************开始解析--元素name"+name+"****"+"string="+string+"**********");
}
if (name.equals("name")&&!string.trim().equals("")) {
books.setName(string);
} else if (name.equals("ide")&&!string.trim().equals("")) {
books.setAuthor(string);
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
if (qName.equals("item")) {
list.add(books);
}
Log.i(tag,"*************结束解析--元素**************");
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
Log.i(tag,"*************结束解析文档**************");
}
public List<Books> getList() {
return list;
}