SAX
解析器
事件处理器
public static void main(String[] args){
//创建解析工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
//得到解析器
SAXParser sp = factory.newSAXparser();
//得到读取器
XMLReader reader = sp.getXMLReader();
//设置内容处理器
//reader.setContentHander(new ListHandler);
BeanListHandler handle = new BeanListHandler();
reader.setContentHander(hndle);
//读取xml文档内容
reader.parse("src/book.xml");
List<Book> list = handle.getBookList();
System.out.println(list);
}
//内容处理器
class ListHandler implements ContentHandler{
public void startElement(String url, String localName, String name, Attributes atts)throws SAXException{
System.out.println("<"+name+">");
for(int i=0; atts!=null && i<atts.getLnegth();i++){
String attName = atts.getQName();
String attValue = atts.getValue();
}
}
public void characters(char[] ch,int start, int length)throws SAXException{
System.out.println(new String(ch,start,length));
}
public void endElement(String url, String localName, String name, Attributes atts)throws SAXException{
System.out.println("<"+name+">");
}
....
//定义处理器
//获取指定标签值
clas TagValueHandler extends DefaultHandler{
private String currentTag;//记住当前解析到的标签
public void startElement(String url, String localName, String name, Attributes atts)throws SAXException{
currentTag = name;
}
}
public void characters(char[] ch,int start, int length)throws SAXException{
if("作者".equals(currentTag)){
System.out.println(new String(ch,start,length));
}
}
public void endElement(String url, String localName, String name, Attributes atts)throws SAXException{
currentTag = null;
}
}
//常用处理器
//把xml文档中的每一本书封装到一个book对象中
//并把多个book对象放在一个list集合中
class BeanListHandler extends DefaultHandler{
private List list = new ArrayList();
private String currentTag;
private Book book;
public void startElement(String url, String localName, String name, Attributes atts)throws SAXException{
currentTag = name;
if("书".equals(currentTag)){
book = new Book();
}
}
public void characters(char[] ch,int start, int length)throws SAXException{
if("书名".equals(currentTag)){
String name = new String(ch,start,length);
book.setName(name);
}
if("作者".equals(currentTag)){
String author = new String(ch,start,length);
book.setName(author);
}
if("售价".equals(currentTag)){
String prive = new String(ch,start,length);
book.setName(price);
}
}
public void endElement(String url, String localName, String name, Attributes atts)throws SAXException{
if(name.equals("书")){
list.add(book);
bool = null;
}
currentTag = null;
}
public List getBookLists(){
return list;
}
}
public class Book{
private Stirng name;
private String author;
private String price;
...//get set 方法
}