packagecom.imooc_xml.sax.handler;importjava.util.ArrayList;importorg.xml.sax.Attributes;importorg.xml.sax.SAXException;importorg.xml.sax.helpers.DefaultHandler;importcom.imooc_xml.sax.entity.Book;public class SAXParserHandler extendsDefaultHandler {//使用全局变量可以使本类的各个方法通用,联系
int bookIndex = 0;
String value= null;
Book book= null;private ArrayList bookList = new ArrayList();public ArrayListgetBookList() {returnbookList;
}/*** 用来遍历xml文件的开始标签*/@Overridepublic voidstartElement(String uri, String localName, String qName,
Attributes attributes)throwsSAXException {//TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);解析xml文件的节点属性,只有book节点有属性
if(qName.equals("book")){
book= newBook();
bookIndex++;//已知book的属性名//attributes.getValue("id");//不知book元素的属性名和个数
int num =attributes.getLength();for(int i=0;i
attributes.getQName(i);
attributes.getValue(i);if(attributes.getQName(i).equals("id")){
book.setId(attributes.getValue(i));
}
}
}else if (!qName.equals("book")&&!qName.equals("bookstore")){//节点名
System.out.println(qName);
}
}/*** 用来遍历xml文件的结束标签*/@Overridepublic voidendElement(String uri, String localName, String qName)throwsSAXException {//TODO Auto-generated method stub
super.endElement(uri, localName, qName);//判断是否针对一本书已经遍历结束
if (qName.equals("book")){
bookList.add(book);
book= null;
System.out.println("结束遍历第"+bookIndex+"本书");
}else if(qName.equals("name")){
book.setName(value);
}else if(qName.equals("author")){
book.setAuthor(value);
}else if(qName.equals("year")){
book.setYear(value);
}else if(qName.equals("price")){
book.setPrice(value);
}else if(qName.equals("language")){
book.setLanguage(value);
}
}
@Overridepublic void characters(char[] ch, int start, intlength)throwsSAXException {//TODO Auto-generated method stub
super.characters(ch, start, length);//ch是节点之间的文本内容
value = newString(ch, start, length);//判断空格和换行
if(!value.trim().equals("")){
System.out.println(value);
}
}/*** 用来标志解析开始*/@Overridepublic void startDocument() throwsSAXException {//TODO Auto-generated method stub
super.startDocument();
System.out.println("SAX解析开始");
}/*** 用来标志解析结束*/@Overridepublic void endDocument() throwsSAXException {//TODO Auto-generated method stub
super.endDocument();
System.out.println("SAX解析结束");
}
}