1.解析XML的两种方式:
解析XML 有两种方式:SAX和 DOM。它们各有利弊。
DOM是把 XML文档全部装载到内存中,然后当成一树进行处理。其好处是当成树处理 起来比较方便,但弊端是如果XML文件比较大时,会对内存消耗比较大;
SAX是逐行扫描 XML文档,逐行解析,而且可以在处理 XML文档过程中的任意时刻 中止处理过程,比如找到我们的目标节点,剩下的XML文档内容就可以不读了,直接结束。其 弊端是操作起来相对不方便,而且对XML文档进行处理,如果修改、新增、删除等操作比较不 方便。
SAX是事件驱动型 XML解析的一个标准接口。它的工作原理是读到文档的开始与结束、 标签元素的开始与结束、内容实体等地方时,触发相应的函数,我们就可以在相应的函数中进行 我们所要进行的处理。
SAX,全称SimpleAPI for XML,即是一种接口,也是指一个软件包
作为接口,SAX是事件驱动型XML解析的一个标准接口
2.SAX的原理:
对文档顺序扫描扫描到文档开始结束,元素开始结束等地方时通知事件处理函数
对大多数SAX实现都会产生以下类型的事件:
文档开始结束时触发文档处理事件
在文档内的每个XML元素接受解析前后触发元素事件
任何元数据通常都由单独的事件交互
在处理文档的DTD或Schema时产生DTD或Schema事件
产生错误事件用来通知主机应用程序解析错误
3SAX常用接口
ContentHandler接口
Java类包中特殊的SAX接口封装了一些对事件处理的方法 当遇到事件就会调用响应方法响应
比如:voidstartDocument() void endElements(String uri,String localName,StringqName)、 characters(char[]ch, int start, int length)等
4SAX解析
解析文档过程:
创建事件处理程序
创建SAX解析器
将事件处理程序分配给解析器
对文档进行解析,将每个事件发送给处理程序
代码大致如下:
//创建一个SAXParserFactory
SAXParserFactoryfactory=SAXParserFactory.newInstance();//XML解析”工厂”
XMLReaderreader=factory.newSAXParser().getXMLReader();//通过上面得到的XML解析” 工厂”对象获得一个XML解析器对象
//为XMLReader设置内容处理器
reader.setContentHandler(newMyContentHandler());
这里的MyContentHandler类为继承DefaultHandler(适配器模式所以不是实现 ContentHandler接口、如果是实现ContentHandler接口的话就得实现ContentHandler接口所 提供的所有方法)的类
//开始解析文件
reader.parse(newInputSource(newStringReader(resultStr)));//resultStr为要解析的字符串 //StringReader- - 以流的方式接受字符串
把自己要的解析工作代码写在响应的方法内(MyContentHandler)