- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
sax解析xml
Sax 解析 xml
JAVA 解析 XML 通常有两种方式,DOM 和 SAX。DOM 虽然是 W3C 的标准,提供了标准的解析方式,但它的解
析效率一直不尽如人意,因为使用 DOM 解析 XML 时,解析器读入整个文档并构建一个驻留内存的树结构(节点树),然
后您的代码才可以使用 DOM 的标准接口来操作这个树结构。但大部分情况下我们只对文档的部分内容感兴趣,根本就不用
先解析整个文档,并且从节点树的根节点来索引一些我们需要的数据也是非常耗时的。
SAX 是一种 XML 解析的替代方法。相比于文档对象模型 DOM ,SAX 是读取和操作 XML 数据的更快速、更轻量的方
法。SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作。它不涉及 DOM 所必需的开销和概
念跳跃。 SAX API 是一个基于事件的 API ,适用于处理数据流,即随着数据的流动而依次处理数据。SAX API
在其解析您的文档时发生一定事件的时候会通知您。在您对其响应时,您不作保存的数据将会 被抛弃。
下面是一个 SAX 解析 XML 的示例(有点长,因为详细注解了 SAX 事件处理的所有方法),SAX API 中主要有四种处理
事件的接口 ,它们分别是ContentHandler ,DTDHandler ,EntityResolver 和 ErrorHandler 。下面的例子可能有点冗
长,实际上只要继承 DefaultHandler 类 ,再覆盖一部分处理事件的方法 同样可以达到这个示例的效果,但为了纵观全
局,还是看看 SAX API 里面所有主要的事件解析方法吧。( 实际上 DefaultHandler 就是实现了上面的四个事件处理器接
口,然后提供了每个抽象方法的默认实现。)
1 ,ContentHandler 接口 :接收文档逻辑内容的通知的处理器接口。
Java 代码
1. import org.xml.sax.Attributes;
2. import org.xml.sax.ContentHandler;
3. import org.xml.sax.Locator;
4. import org.xml.sax.SAXException;
5.
6. class MyContentHandler implements ContentHandler{
7. StringBuffer jsonStringBuffer ;
8. int frontBlankCount = 0;
9. public MyContentHandler(){
10. jsonStringBuffer = new StringBuffer();
11. }
12. /*
13. * 接收字符数据的通知。
14. * 在 DOM 中 ch[begin:end] 相当于 Text 节点的节点值(nodeValue )
15. */
16. @Override
17. public void characters(char[] ch, int begin, int length) throws SAXException {
18. StringBuffer buffer = new StringBuffer();
1 / 11
19. for(int i = begin ; i begin+length ; i++){
20. switch(ch[i]){
21. case \\:buffer.append(\\\\ );break;
22. case \r:buffer.append(\\r);break;
23. case \ n:buffer.append(\\n);break;
24. case \t:buffer.append(\\t);break;
25. case \ :buffer.append(\\\ );
文档评论(0)