XML 可扩充标记语言
除了SAX(逐行扫描解析 操作稍显复杂 向文档添删内容不便)
DOM方式(树 缺点:大数据性能不好) (听说还有PULL)
1 什么是SAX
Simple API for XML 一种接口 也是一个软件包
作为接口 SAX是事件驱动型XML解析的一个标准接口
2 SAX的基本原理
对文档顺序扫描 扫描到文档开始结束,元素开始结束等地方时通知事件处理函数
例如:
文档开始结束时触发文档处理事件
在文档内的每个XML元素接受解析前后触发元素事件
任何元数据通常都由单独的事件交互
在处理文档的DTD或Schema时产生DTD或Schema事件
产生错误事件用来通知主机应用程序解析错误
SAX模型(图)
eg:
<doc>
<para>hello,world</para>
</doc>
start document
start element:doc
start element:para
characters:hello,world
endelement:para
start element:doc
end document
3 SAX常用接口
ContentHandler接口
Java类包中特殊的SAX接口 封装了一些对事件处理的方法 当遇到事件 就会调用响应方法响应
比如:void startDocument() void endElements(String uri,String localName,String qName)等
4 SAX解析
解析文档过程
创建事件处理程序
创建SAX解析器
将事件处理程序分配给解析器
对文档进行解析,将每个事件发送给处理程序
//创建一个SAXParserFactory
SAXParserFactory factory=SAXParserFactory.newInstance();
XMLReader reader=factory.newSAXParser().getXMLReader();
//为XMLReader设置内容处理器
reader.setContentHandler(new MyContentHandler());
这里的MyContentHandler类为继承DefaultHandler(适配器模式 所以不是实现ContentHandler接口)的类
//开始解析文件
reader.parse(new InputSource(new StringReader(resultStr)));//resultStr为要解析的字符串
把自己要的解析工作代码写在响应的方法内(MyContentHandler)