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>[email protected]</email>

</linkman>

<linkmanid="northwind">

<name>skewrain</name>

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

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念