您的位置:首页 > 编程语言 > Java开发

xml的SAX解析

2016-06-08 03:35 393 查看
SAX 和 STAX 都是 基于事件驱动 —– SAX推模式 STAX拉模式

SAX原理图如下:



SAX常用事件

startDocument() —- 文档开始事件

startElemen() —- 元素开始事件

characters() —- 文本元素事件

endElement() —- 元素结束事件

endDocument() —– 文档结束事件

为什么说SAX是推模式解析? 解析器控制xml文件解析,由解析器调用相应事件方法

在startElemen() endElement() 获得 开始和结束元素名称

在characters() 获得读取到文本内容

在startElemen() 读取属性值

SAX实现示例:

public class SAXTest {
public static void main(String[] args) throws Exception {
// 1、工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
// 2、通过工厂获得解析器
SAXParser parser = factory.newSAXParser();

// 3 、创建 Handler
MyHandler handler = new MyHandler();

// 4、将xml 文档 和 handler 同时传递给 解析器
parser.parse("server.xml", handler);
}
}

/**
* 继承 DefaultHandler 重写 5 个事件方法
*
* @author 小鹏鹏
*
*/
class MyHandler extends DefaultHandler {
@Override
public void startDocument() throws SAXException {
System.out.println("start document...");
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
System.out.println("start element(" + qName + ")...");
// 打印server元素 id 属性 --- 判断当前开始元素是 server
if (qName.equals("server")) {
System.out.println("id属性的值:" + attributes.getValue("id"));
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
String content = new String(ch, start, length);
System.out.println("characters: " + content);
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("end element(" + qName + ")...");
}
@Override
public void endDocument() throws SAXException {
System.out.println("end document...");
}
}


STAX 拉模式xml 解析方式 —– 客户端程序,自己控制xml事件,主动调用相应事件方法

STAX原理图:



当使用XML PULL 如果使用Android系统,系统内置无需下载任何开发包,如果想JavaSE JavaEE 使用pull 解析技术 下载单独pull 开发工具包

xpp3 —– XML Pull Parser 3 是pull API 代码实现

使用pull 解析器

1、去网站上 下载 pull 解析器实现 xpp3 (Android 内置)

2、将 xpp3-1.1.3.4.C.jar 导入 java工程

导入jar包 位于 当前工程内部 , 在工程内新建 lib ,将jar复制过来 , 将pull 解析器 jar 添加build path

jar 包就是.class文件 集合压缩包 (采用zip格式压缩)

Pull解析器 使用 stax 解析方式 —- 拉模式解析

Pull采用将xml文档传递 解析器,手动通过next触发文档解析事件,在客户端代码中获取当前事件 ,从而调用相应事件处理方法

3、创建pull 解析器

4、将xml 文档内容传递 pull 解析器

为什么 STAX 解析方式 效率 好于 SAX ?

1、SAX 无选择性的,所有事件都会处理 解析方式,Stax 由用户控制需要处理事件类型

2、在使用Stax进行数据解析时,随时终止解析

Pull 解析器 生成 xml 文档功能 —- 通过 XmlSerializer 生成 xml 文档

解析xml : 文档开始、元素开始、文本元素、元素结束、文档结束

生成xml :生成文档声明(文档开始),元素开始、文本内容、元素结束 、文档结束

1、生成简单xml

2、通过对象数据生成xml

3、通过对象List数据生成xml

在程序中抽取两个方法 —– 1. xml — List对象 2. List对象生成xml

对内存中List进行CURD操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xml SAX java