XML的四种解析方式之SAX
SAX(SimpleAPIsforXML,操作XML的简单接口),与DOM操作不同的是,SAX采用的是一种顺序的模式进行访问,是一种快速读取XML数据的方式。当使用SAX解析器进行操作的时候会触发一系列的事件,如下表所示,当扫描到文档(document)开始与结束、元素(element)开始与结束时都会调用相关的处理方法,并由这些操作方法作出相应的操作,直至整个文档扫描结束。
如果想要实现这种SAX解析,则肯定要首先建立一个SAX的解析器,一个类只要继承了DefaultHandler类即可实现。 一个简单的XML解析器的代码如下所示: packageorg.skewrain.xml.sax; importorg.xml.sax.*; importorg.xml.sax.helpers.*; publicclassMySAXextendsDefaultHandler{ publicvoidstartDocument() throwsSAXException{ System.out.println("<?xmlversion="1.0"encoding="GBK">"); } publicvoidstartElement(Stringuri, StringlocalName, StringqName; Attributesattributes) throwsSAXException{ System.out.print("<"); System.out.print(qName); System.out.print(">"); } publicvoidendElement(Stringuri, StringlocalName; StringqName) throwsSAXException{ System.out.print("<"); System.out.print("<"); System.out.print(qName); System.out.print(">"); } publicvoidcharacters(char[]ch, intstart, intlength) throwsSAXException{ System.out.print(newString(ch,start,length)); } publicvoidendDocument() throwsSAXException{ System.out.println("文档结束。。。"); } }
使用该解析器解析sax_01.xml。 Sax_01.xml的代码如下所示: <?xmlversion="1.0"encoding="GBK"standalone="no"?> <addresslist> <linkmanid="skewrain"> <name>斜雨</name> <email>skewrain@foxmail.com</email> </linkman> <linkmanid="northwind"> <name>skewrain</name> <email>skewrain@foxmail.com</email> </linkman> </addresslist>
使用程序TestSAX.java引用该解析器解析sax_01.xml的代码如下所示: packageorg.skewrain.xml.sax; importjava.io.*; importjavax.xml.parsers.*; publicclassTestSAX{ publicstaticvoidmain(Stringargs[])throwsException{ //建立SAX解析工厂 SAXParserFactoryfactory=SAXParserFactory.newInstance(); SAXParserparser=factory.newSAXParser(); parser.parse("d:"+File.separator+"sax_01.xml",newMySAX()); } } 执行该段程序的结果如下所示:
在MySAX.java中加入如下属性解析的语句: publicvoidstartElement(Stringuri, StringqName, Attributesattributes) throwsSAXException{ System.out.print("<"); System.out.print(qName); if(attributes!=null){ for(intx=0;x<attributes.getLength();x++){ System.out.print(""+attributes.getQName(x)+"=""+attributes.getValue(x)+"""); } } System.out.print(">"); } 再次编译执行的结果如下所示:
SAX解析与DOM解析的区别:
SAX解析适合于文件的读取,但是不适合于文件的修改。DOM解析适合于文件的修改,不适合于文件的读取,二者各有优点,不能互相取代。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |