gistfile1.txt package cn.jxau.sax;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax
package cn.jxau.sax;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import cn.jxau.domain.Book;
public class Demo {
public static void main(String[] args) throws Exception, SAXException {
// 创建产生解析器的工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
// 得到解析器
SAXParser parser = factory.newSAXParser();
// 得到读取器
XMLReader reader = parser.getXMLReader();
// 设置读取器的处理器(由程序员设置)
// 创建处理器对象
BookHandler handler = new BookHandler();
reader.setContentHandler(handler);
// 读取文档
reader.parse("book.xml");
List
list = handler.getlist();
for (Book book : list) {
System.out.println(book.getName() + " " + book.getAuthor() + " " + book.getPrice());
}
}
}
class BookHandler extends DefaultHandler {
private Book book = null;
private List list = new ArrayList();
public List getlist() {
return list;
}
// 定义记住标签名的变量
private String current_tag = null;
// 定义记住第几本书的变量
private int count = 0;
@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);
current_tag = qName;
if ("书".equals(current_tag)) {
// 创建一本书
book = new Book();
count++;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
if ("书名".equals(current_tag)) {
book.setName(new String(ch,start,length));
}
if ("作者".equals(current_tag)) {
book.setAuthor(new String(ch,start,length));
}
if ("售价".equals(current_tag)) {
book.setPrice(new String(ch,start,length));
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
if ("书".equals(qName) && count == 1) {
list.add(book);
}
current_tag = null;//每个标签结束后都会有一段空白字段,空白纸短也是一个对象,
//由于空白字段没有标签,所以程序不会执行startelement和endelement,而去执行characters
//此时的current_tag的值还是上一个标签名,所以要将current_tag的值置为null
}
}
