一、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>
user.xml

相关文章: