1. Java解析XML简介
Java库中提供了两种XML解析器:
像文档对象模型(Document Object Model,DOM)解析器这的树型解析器(tree parse),它们将读入的XML文档转换成树结构。
像XML简单API(Simple API for XML,SAX)解析器这样的流机制解析器(streaming parser),它们在读入XML文档时生成相应的事件。
2. SAX简介
SAX解析器在解析XML输入数据的各个组成部分时会报告事件,但不会以任何方式存储文档,而是由事件处理器建立相应的数据结构。实际上DOM解析器是在SAX解析器的基础上构建的,它在接收到解析器事件时构建DOM树。
3. 使用SAX解析器
SAX解析器架构图
在使用SAX解析器时,需要一个处理器来为各种解析器事件定义事件动作。DefaultHandler接口定义了若干个在解析文档时解析器会调用的回调方法。下面是最重要的几个方法:
startElement和endElement在每当遇到起始或终止标签时调用。
characters在每当遇到字符数据时调用。
startDocument和endDocument分别在文档开始和结束时各调用一次。
例如,在解析以下片段时:
韩信
25
解析器会产生以下回调:
1)startElement,元素名:person
2)startElement,元素名:name ,属性:type="string"
3)characters,内容:韩信
4)endElement,元素名:name
5)startElement,元素名:age
6)characters,内容:25
7)endElement,元素名:age
8)endElement,元素名:person
处理器必须覆盖这些方法,让它们执行在解析文件时我们想让它们执行的动作。
下面通过一个简单的demo体会SAX解析XML的过程。
3.1 准备xml
首先准备person.xml,内容如下
韩信
25
李白
23
3.2 解析代码
获取解析工厂
从解析工厂获取解析器
得到解读器
设置内容处理器
读取xml的文档内容
package cn.lastwhisper.javabasic.Sax;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.IOException;
/**
* @author lastwhisper
* @desc SAX方式解析xml文件
* @email gaojun56