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