SAX
实例:
public class SAXParse {
public static void main(String[] args) {
//获取一个SAXParserFactroy的实例
SAXParserFactory factory = SAXParserFactory.newInstance();
//通过factory获取SAXParser实例
try {
SAXParser parser = factory.newSAXParser();
//创建SAXParserHandler对象
SAXParserHandler handler = new SAXParserHandler();
parser.parse("books.xml", handler);
System.out.println("一共有"+handler.getBookList().size()+"本书");
for(Book book : handler.getBookList()){
System.out.println("=======start======");
System.out.println(book.getId());
System.out.println(book.getName());
System.out.println(book.getAuthor());
System.out.println(book.getPrice());
System.out.println(book.getYear());
System.out.println(book.getLanguage());
System.out.println("=======end========");
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class SAXParserHandler extends DefaultHandler {
int bookIndex = 0;
Book book =null;
String value = null;
ArrayList<Book> bookList = new ArrayList<Book>();
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
value = new String(ch, start, length);
if(!value.trim().equals("")){
System.out.println("节点值:"+value);
}
}
/**
* 用来遍历xml结束标签
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
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);
}
}
/**
* 用来遍历xml开始标签
*/
@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);
//qName走到的元素属性
//开始走到了book属性
if(qName.equals("book")){
//创建一个book对象
book = new Book();
bookIndex++;
System.out.println("========开始遍历第"+ bookIndex +"书本==========");
//已知book元素下的属性名称,根据属性名称获取属性值,
// String value = attributes.getValue("id");
// System.out.println("book的属性值是:"+ value);
//若不知元素下的属性名称和个数
int num = attributes.getLength();
for(int i=0; i<num ;i++){
System.out.println("book元素的第"+(i+1)+"个属性名是:"+
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.print("节点名是:"+ qName+"---");
}
}
/**
* 标志解析开始
*/
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
System.out.println("SAX解析开始");
}
/**
* 标志解析结束
*/
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
System.out.println("SAX解析结束");
}
public ArrayList<Book> getBookList() {
return bookList;
}
public void setBookList(ArrayList<Book> bookList) {
this.bookList = bookList;
}
}