码迷,mamicode.com
首页 > 其他好文 > 详细

6. SAX解析XML

时间:2015-06-09 23:41:34      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

SAX解析:
SAX采用事件处理的方式解析XML文件,利用 SAX 解析 XML 文档,涉及两个部分:
解析器和事件处理器 :
1. 解析器可以使用SAXP的API创建,创建出SAX解析器后,
就可以指定解析器去解析某个XML文档。
解析器采用SAX方式在解析某个XML文档时,
它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法,
解析器在调用事件处理器的方法时,
会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。
2. 事件处理器由程序员编写,程序员通过事件处理器中方法的参数,
就可以很轻松地得到SAX解析器解析到的数据,从而可以决定如何对数据进行处理。
 
与DOM不同的是,SAX解析器不直接解析XML
而是创建SAXReader来解析XML

思路:
// 使用SAXParserFactory创建SAX解析器工厂
parserFactory = SAXParserFactory.newInstance();
// 通过SAX解析器工厂拿到解析器对象
parser = parserFactory.newSAXParser();
// 通过解析器对象得到一个XML文件读取器
XMLReader reader = parser.getXMLReader();
// 设置读取器的事件处理器
reader.setContentHandler(new UserHandler());
// 解析XML文件
reader.parse("src/users.xml");
 
处理器接口主要方法:
startDocument    开始文档
endDocument    结束文档
startElement    开始元素
endElement    结束元素
characters    获取文本
 
代码:
 1 SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
 2 SAXParser parser = saxParserFactory.newSAXParser();
 3 XMLReader reader = parser.getXMLReader();
 4 reader.setContentHandler(new ContentHandler() {
 5        // 开始文档节点
 6        public void startDocument() throws SAXException {
 7             System.out.println("开始文档节点");
 8        }
 9 
10        // 结束文档节点
11        public void endDocument() throws SAXException {
12             System.out.println("结束文档节点");
13        }
14 
15        // 开始元素节点
16        @Override
17        public void startElement(String uri, String localName,
18              String qName, Attributes atts) throws SAXException {
19             System.out.println("开始元素节点" + qName);
20             //获取元素的属性操作
21             String data = atts.getValue(0);
22         }
23 
24        // 结束元素节点
25        @Override
26        public void endElement(String uri, String localName, String qName)
27          throws SAXException {
28             System.out.println("结束元素节点" + qName);
29        }
30 
31        // 获取文本
32        @Override
33        public void characters(char[] ch, int start, int length)
34              throws SAXException {
35             System.out.println(new String(ch, start, length));
36        }
37 
38        //还有几个方法,不常用,空实现.....
39   });
40  reader.parse("bookstore.xml");
用接口实现那么多方法效率低,所以java提供了DefaultHandler类
只要复写需要的方法即可:
1 reader.setContentHandler(new DefaultHandler() {     
2        @Override
3        public void characters(char[] ch, int start, int length)
4          throws SAXException {
5             System.out.println(new String(ch, start, length));
6        }
7 });

6. SAX解析XML

标签:

原文地址:http://www.cnblogs.com/lee-hao/p/4564776.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!