一、Sax解析
是从头到尾逐行逐个元素读取内容,修改较为不便,但适用于只读的大文档。
Sax采用事件驱动的方式解析文档。简单点说,如同在电影院看电影一样,从头到尾看一遍就完了,不能回退(Dom可来来回回读取)
在看电影的过程中,每遇到一个情节,一段泪水,一次擦肩,你都会调动大脑和神经去接收或处理这些信息
同样,在Sax的解析过程中,读取到文档开头、结尾,元素的开头和结尾都会触发一些回调方法,你可以在这些回调方法中进行相应事件处理
这四个方法是:startDocument() 、 endDocument()、 startElement()、 endElement
此外,光读取到节点处是不够的,我们还需要characters()方法来仔细处理元素内包含的内容
将这些回调方法集合起来,便形成了一个类,这个类也就是我们需要的解析器
一般从Main方法中读取文档,却在解析器中处理文档,这就是所谓的事件驱动解析方法(解释为转载)
------------------------------------------------------------------------------------------------------------------------------------------------------
解析器中的方法:
1.解析文档开头
1 @Override 2 public void startDocument() throws SAXException { 3 // TODO Auto-generated method stub 4 super.startDocument(); 5 }
2.解析开始标签
1 @Override 2 public void startElement(String uri, String localName, String qName, 3 Attributes attributes) throws SAXException { 4 // TODO Auto-generated method stub 5 super.startElement(uri, localName, qName, attributes); 6 }
3.解析内容
1 @Override 2 public void characters(char[] ch, int start, int length) 3 throws SAXException { 4 // TODO Auto-generated method stub 5 super.characters(ch, start, length); 6 }
4.解析结束标签
1 @Override 2 public void endElement(String uri, String localName, String qName) 3 throws SAXException { 4 // TODO Auto-generated method stub 5 super.endElement(uri, localName, qName); 6 }
5.解析文档结束
1 @Override 2 public void endDocument() throws SAXException { 3 // TODO Auto-generated method stub 4 super.endDocument(); 5 }
下面看一个Demo来实现解析一个xml文件
(1).xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <persons> 3 <person> 4 <name>张三</name> 5 <age>30</age> 6 <sex>男</sex> 7 </person> 8 9 <person> 10 <name>李四</name> 11 <age>32</age> 12 <sex>女</sex> 13 </person> 14 15 <person> 16 <name>王五</name> 17 <age>30</age> 18 <sex>男</sex> 19 </person> 20 </persons>