XML的四种解析方式之SAX

前端之家收集整理的这篇文章主要介绍了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解析适合于文件修改,不适合于文件的读取,二者各有优点,不能互相取代。

猜你在找的XML相关文章