XML(eXtended Markup Language,可扩展标记性语言)提供了一套跨平台,跨网络,跨程序的语言数据描述方式,使用XML可以方便地实现数据交换,系统配置,内容管理等常见功能。

 使用SAX 解析XML文件,是顺序读入需要的文件内容,不受文件大小的限制,由于采用部分读取,只能对文件按从头到尾解析一遍,不支持文件的随意存取,只能读着xml文件的内容,但不能修改,当然,这种解析方式,在开发上比较复杂,需要自定义事件处理器,对于开发人员更加灵活,可以用sax建立对xml对象模型。

现在开始用代码来实现SAX解析的方法,如下:

XML文件如下:

 

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <?xml-stylesheet type="text/css" href="attrib.css"?> 
  3. <addresslist> 
  4.     <linkman id="zlj"> 
  5.         <name>xt</name> 
  6.         <email>xxxx@sina.com</email> 
  7.     </linkman> 
  8.     <linkman id="zs"> 
  9.         <name>张三</name> 
  10.         <email>XXXXX@sina.com</email> 
  11.     </linkman> 
  12. </addresslist> 

首先要自定义一个SAX的XML解析器,代码如下:

  1. package com.etc.sax;  
  2.  
  3. import org.xml.sax.Attributes;  
  4. import org.xml.sax.SAXException;  
  5. import org.xml.sax.helpers.DefaultHandler;  
  6.  
  7. /**  
  8.  * 用sax来解析xml  
  9.  * sax 解析器  
  10.  * @author zhang lj  
  11.  *  
  12.  * 2012-12-19  
  13.  */ 
  14. public class MySax extends DefaultHandler{  
  15.     @Override 
  16.     public void startDocument() throws SAXException {   //文档开始  
  17.         System.out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");  
  18.     }  
  19.     @Override 
  20.     public void endDocument() throws SAXException {  
  21.           
  22.         System.out.println("\n 文档读取结束 ............");  
  23.     }  
  24.     @Override 
  25.     public void startElement(String uri, String localName, String name,  
  26.             Attributes attributes) throws SAXException {  
  27.          System.out.print("<");  
  28.          System.out.print(name);  
  29.          if(attributes!=null){  
  30.              for(int i=0;i<attributes.getLength();i++){  
  31.                  System.out.print(""+attributes.getQName(i)+"=\""+attributes.getValue(i)+"\"");  
  32.              }  
  33.          }  
  34.          System.out.print(">");  
  35.     }  
  36.     @Override 
  37.     public void characters(char[] ch, int start, int length)  
  38.             throws SAXException {  
  39.           
  40.         System.out.print(new String(ch,start,length));  
  41.     }  
  42.       
  43.     @Override 
  44.     public void endElement(String uri, String localName, String name)  
  45.             throws SAXException {  
  46.         System.out.print("</");  
  47.         System.out.print(name);  
  48.         System.out.print(">");  
  49.     }  
  50. }  

然后对XML文件进行解析,代码如下:

 

  1. package com.etc.sax;  
  2.  
  3. import javax.xml.parsers.SAXParser;  
  4. import javax.xml.parsers.SAXParserFactory;  
  5. /**  
  6.  *   
  7.  * @author zhang lj  
  8.  *  
  9.  * 2012-12-19  
  10.  */ 
  11. public class TestSAX {  
  12.     public static void main(String[] args) throws Exception {  
  13.         SAXParserFactory factory=SAXParserFactory.newInstance();  
  14.         SAXParser parser=factory.newSAXParser();  
  15.         parser.parse("sax_demo.xml"new MySax());  
  16.     }  

到这边解析 就完成了,让我们再看一下dom解析 和sax解析 的区别吧,

区别如下:

 

SAX解析XML文件_SAX