1、 课程名称:XML解析——SAX 2、本次课程预计讲解的知识点
* 掌握SAX的主要操作原理 * 理解DOM与SAX操作的区别
3、主要内容
SAX解析操作
SAX(Simple APIs for XML,操作XML的简单接口),与DOM操作不同的是,SAX采
用的是一种顺序的模式进行访问,是一种快速读取XML数据的方式。当使用SAX解析器进行操作的时候会触发一系列的事件,当扫描到文档(Document)开始与结束、元素(element)开始与结束时都会调用相关的处理方法,并由这些操作方法作出相应的操作直至整个文档扫描结束。
但是如果要想实现这种SAX解析,则肯定要首先建立一个SAX的解析器,一个类只要继承了DefaultHandler类即可实现。 package org.gxb.xml.sal; import org.xml.sax.*; import org.xml.sax.helpers.*; public class MySAX extends DefaultHandler{ public void startDocument() throws SAXException{ System.out.println(\"\"); } public void startElement(String uri, String localName,String qName, Attributes attributes) throws SAXException{ System.out.print(\"<\"); System.out.print(qName); System.out.print(\">\"); } public void characters(char[] ch,int start,int length) throws SAXException{ System.out.print(new String(ch,start,length)); } public void startElement(String uri,String localName,String qName, Attributes attributes) throws SAXException{ System.out.print(\"<\"); System.out.print(qName); System.out.print(\">\"); } public void endDocument() throws SAXException{ System.out.println(\"文档结束。。\"); } } 此时一个简单的XML解析器就完成了。下面进行文件的读取。 高兴波 gaoxingbo0429@qq.com 高追风 gaozhuifeng0429@qq.com 此时元素中存在了属性,属性暂时不做任何的其他处理。 使用解析器进行文件的解析操作。 package org.gxb.xml.sal; import org.xml.sax.*; import org.xml.sax.helpers.*; public class MySAX extends DefaultHandler{ public void startDocument() throws SAXException{ System.out.println(\"\"); } public void startElement(String uri, String localName,String qName, Attributes attributes) throws SAXException{ System.out.print(\"<\"); System.out.print(qName); if(attributes!=null){ for(int x=0;x\"); } public void characters(char[] ch,int start,int length) throws SAXException{ System.out.print(new String(ch,start,length)); } public void endElement(String uri, String localName, String qName) throws SAXException{ System.out.print(\"<\"); System.out.print(qName); System.out.print(\">\"); } public void endDocument() throws SAXException{ } package org.gxb.xml.sal; import java.io.*; import javax.xml.parsers.*; public class TestSAX{ public static void main(String[] args)throws Exception{ //建立SAX解析工厂 SAXParserFactory factory=SAXParserFactory.newInstance(); SAXParser parser=factory.newSAXParser(); parser.parse(new File(\"D:\"+File.separator+\"sanDaKuangJia\"+File.separator+\"xmldemo\"+File.separator+\"sax\"+File.separator+\"sax_demo.xml\"),new MySAX()); } } No. 1 } System.out.println(\"文档结束。。\"); DOM解析和SAX解析的区别区别 操作 DOM 将所有的文件读取到内存之中形成DOM树,如果文件量过大,则无法使用 DOM树在内存中形成,可以随意存放或读取文件树的任何部分,没有次数 可以任意修改文件树 SAX 顺序读入所有需要的文件内容,不会一次性全部读取,不受文件大小的 由于采用部分读取,只能对文件按顺序从头到尾解析一遍,不支持文件的随意读取 只能读取XML文件内容,但不能修改 2 访问 3 修改 4 5
复杂度 对象模型 易于理解,易于开发 开发上比较复杂,需要用户自定义事件处理器 系统为使用者自动建立DOM树, 对开发人员更加灵活,可以用SAXXML对象模型由系统提供 建立自己的XML对象模型 DOM和SAX都可以完成同样的功能,那么使用哪一种更好呢? DOM可以修改文件,而SAX是无法修改的。
从使用上DOM和SAX各有特点,谁也无法替代谁。
4、总结
* SAX解析适合于文件的读取,但是本身不能修改; * DOM与SAX各有优点,使用时要分场合。
5、预习
XML解析——JDOM