xml基础--解析(SAX)
来源:互联网 发布:深圳买房 知乎 编辑:程序博客网 时间:2024/05/29 03:55
1.简介:
1>定义:SAX(Simple Apis for XML) XML简单应用程序接口.SAX提供的访问模式是一种顺序模式,是一种快速读写XML数据的方式。当使用SAX分析器对XML文档进行分析时,会触发一系列的事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML文档的访问,因而SAX接口也被称件事件驱动接口
2>SAX与DOM的区别:
DOM--解析XML时,首先要将XML文档加载到内存当中,然后可以通过随机访问方式访问内存中的DOM树,访问大型的xml文档时会出现内存溢出的错误;
SAX--解析XML时,是基于事件而且是顺序执行的,一旦经过了某个元素,就没有办法再去访问了,SAX不必将整个XML文档加载到内存中,因此占用的内存要比DOM小,对于大型的XML文档来说,通常会使用SAX而不是DOM进行解析。
3>SAX使用的观察者模式,SAX分析器在对XML文档进行分析时,触发了一系列的事件,由于事件触发本身是有时序性的,因此,SAX提供了一种顺序访问机制,对于已经分析过的部分,不能再倒回重新处理。SAX之所以叫做"简单"应用程序接口,是因为SAX分析只做了一些简单的工作,大部分工作还要由应用程序自己去做。也就是说,SAX分析器在实现时,它只顺序地检查XML文档中的字节流,判断当前字是XML语法中的哪一部分,是否符合XML语法,然后再触发相应的事件,而事件处理函数本身则要由应用程序自己来实现,同DOM分析器相比,SAX分析器缺乏灵活性。然而,由于SAX分析器实现简单,对内存要求较低,因此实现效率比较高,对于那些只需要访问XML文档中的数据而不需要对文档进行更改的应用程序来说。SAX分析器更为适合。
4>SAX分析器构成框架:
SAX分析器同DOM解析器相同也使用了工厂方法模式,上图中的SAXParserFactory用来生成一个分析器实例。XML文档从左侧箭头所示处读入,当分析器对文档进行分析时,就会触发在DocmentHandler, ErrorHandler,DTDHandler以及EntityResolver接口中定义的回调方法,应用程序需要去实现这些接口。
2.SAX解析器详解:
1>org.xml.sax.helpers.DefaultHandler类的方法:
2>解析步骤:
a.获得SAX解析器工厂实例:
SAXParserFactory factory=SAXParserFactory.newInstance();
b.获得SAX解析器实例:
SAXParser parser=factory.newSAXParser();
c.开始解析XML文档:
parser.parse(new File("student.xml"), new MyHandler());
class MyHandler extends DefaultHandler{private Stack<String> stack=new Stack<String>();private String name;private String gender;private String age;@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {stack.push(qName);for (int i = 0; i < attributes.getLength(); i++) {String attrName=attributes.getQName(i);String attrValue=attributes.getValue(i);System.out.println(attrName+":"+attrValue);}}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {String tag=stack.peek();if("姓名".equals(tag)){name=new String(ch,start,length);}else if("性别".equals(tag)){gender=new String(ch,start,length);}else if("年龄".equals(tag)){age=new String(ch,start,length);}}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {stack.pop();if("学生".equals(qName)){System.out.println("姓名:"+name);System.out.println("性别:"+gender);System.out.println("年龄:"+age);System.out.println();}}}
- xml基础--解析(SAX)
- SAX解析xml基础
- xml解析之sax基础
- XML基础编程解析(DOM SAX Dom4J)
- XML基础——SAX解析
- [XML] SAX解析XML
- 【XML】SAX解析XML
- XML解析(SAX解析)
- XML解析:SAX解析
- Study SAX《SAX解析XML》
- JavaWeb-05 XML基础(Dom解析和Sax解析)
- 使用SAX解析XML
- 解析xml之--SAX
- SAX解析XML
- SAX解析XML
- xml文件解析-SAX
- 解析xml之--SAX
- 解析xml之--SAX
- 如何控制word里的多级列表
- 用showModalDialog打开的窗口关闭时怎么刷新父页面
- 9patch的工具
- jquery插件
- requestWindowFeature()的应用
- xml基础--解析(SAX)
- 命令模式c++实现
- 汇编伪指令总结
- Linux常用命令
- HDU 1558 Segment Set
- getWindow().setFlags方法
- Js闭包和好处
- java常见异常总结
- jQuery HTML 操作