加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML的四种解析方式之SAX

发布时间:2020-12-15 23:04:59 所属栏目:百科 来源:网络整理
导读:SAX(SimpleAPIsforXML,操作XML的简单接口) ,与 DOM 操作不同的是, SAX 采用的是一种顺序的模式进行访问,是一种快速读取 XML 数据的方式。当使用 SAX 解析器进行操作的时候会触发一系列的事件,如下表所示,当扫描到文档( document )开始与结束、元素

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解析适合于文件的修改,不适合于文件的读取,二者各有优点,不能互相取代。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读