XML(eXtended Markup Language,可扩展标记性语言)提供了一套跨平台,跨网络,跨程序的语言数据描述方式,使用XML可以方便地实现数据交换,系统配置,内容管理等常见功能。 |
使用SAX 解析XML文件,是顺序读入需要的文件内容,不受文件大小的限制,由于采用部分读取,只能对文件按从头到尾解析一遍,不支持文件的随意存取,只能读着xml文件的内容,但不能修改,当然,这种解析方式,在开发上比较复杂,需要自定义事件处理器,对于开发人员更加灵活,可以用sax建立对xml对象模型。
现在开始用代码来实现SAX解析的方法,如下:
XML文件如下:
- <?xmlversion="1.0"encoding="UTF-8"?>
- <?xml-stylesheettype="text/css"href="attrib.css"?>
- <addresslist>
- <linkmanid="zlj">
- <name>xt</name>
- <email>xxxx@sina.com</email>
- </linkman>
- <linkmanid="zs">
- <name>张三</name>
- <email>XXXXX@sina.com</email>
- </linkman>
- </addresslist>
首先要自定义一个SAX的XML解析器,代码如下:
- packagecom.etc.sax;
- importorg.xml.sax.Attributes;
- importorg.xml.sax.SAXException;
- importorg.xml.sax.helpers.DefaultHandler;
- publicclassMySaxextendsDefaultHandler{
- @Override
- publicvoidstartDocument()throwsSAXException{
- System.out.println("<?xmlversion="1.0"encoding="UTF-8"?>");
- }
- @Override
- publicvoidendDocument()throwsSAXException{
-
- System.out.println("n文档读取结束............");
- }
- @Override
- publicvoidstartElement(Stringuri,StringlocalName,Stringname,
- Attributesattributes)throwsSAXException{
- System.out.print("<");
- System.out.print(name);
- if(attributes!=null){
- for(inti=0;i<attributes.getLength();i++){
- System.out.print(""+attributes.getQName(i)+"=""+attributes.getValue(i)+""");
- }
- }
- System.out.print(">");
- }
- @Override
- publicvoidcharacters(char[]ch,intstart,intlength)
- throwsSAXException{
-
- System.out.print(newString(ch,start,length));
- }
-
- @Override
- publicvoidendElement(Stringuri,Stringname)
- throwsSAXException{
- System.out.print("</");
- System.out.print(name);
- System.out.print(">");
- }
- }
然后对XML文件进行解析,代码如下:
- packagecom.etc.sax;
- importjavax.xml.parsers.SAXParser;
- importjavax.xml.parsers.SAXParserFactory;
- publicclassTestSAX{
- publicstaticvoidmain(String[]args)throwsException{
- SAXParserFactoryfactory=SAXParserFactory.newInstance();
- SAXParserparser=factory.newSAXParser();
- parser.parse("sax_demo.xml",newMySax());
- }
- }
到这边解析 就完成了,让我们再看一下dom解析 和sax解析 的区别吧,
区别如下:
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|