隨筆 - 6  文章 - 129  trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(14)

          隨筆檔案(6)

          文章分類(467)

          文章檔案(423)

          相冊

          收藏夾(18)

          JAVA

          搜索

          •  

          積分與排名

          • 積分 - 827240
          • 排名 - 49

          最新評論

          閱讀排行榜

          評論排行榜


          1. SAX ( Simple Application interface for XML ), 是一組程序設(shè)計接口,采用 observer 模式,將XML文件視為一個文字流的數(shù)據(jù),在讀取XML 元素時觸發(fā)一系列的事件

          2. 使用DOM 時是將xml 文件解析為一個樹狀結(jié)構(gòu),并對樹中的節(jié)點進行操作
          使用SAX 加載XML文件時,他的操作像打開一個“順序的文件字符流”,在讀到XML元素的開始標記,結(jié)尾標記和內(nèi)容標記時將產(chǎn)生一系列的事件
          如一個簡單的XML文件:<hello><message>hello XML!</message></hello>
          會相應(yīng)的觸發(fā):startDocument, startElement, characters, endElement, endDocument, 只需編寫這些事件處理程序就可以解析XML文件了

          3. SAX 可以高效的使用內(nèi)存,因為SAX 只是順序的讀取XML 文件的內(nèi)容,并不會將XML 文件完全加載,這樣就比DOM 的處理效率高
          但SAX 只能讀取XML 文件的內(nèi)容,而不能更改XML 的內(nèi)容,也不能隨機訪問XML 元素

          4. 在SAX 中有4個處理器是要實現(xiàn)的:ContentHandler,DTDHandler,EntityResolver,ErrorHandler,以處理不同的事件,這是比較麻煩的,
          幸好SAX 定義了一個 DefaultHandler 類把這幾個實現(xiàn)了,我們只需在 DefaultHandler中定義事件處理方法,然后注冊到XMLReader,而SAXParser封裝了XMLReader的實現(xiàn)類,
          SAXParser又是由SAXParserFactory提供的,所以我們實際用到的類只有:SAXParserFactory,SAXParser,DefaultHandler

          5. SAX 的解析步驟:
          (1)寫一個類繼承 DefaultHandler, 實現(xiàn)自己的事件處理方法
          (2)在主程序中建立 SAXParserFactory
          (3)可以設(shè)置這個factory 的參數(shù)
          (4)從這個factory 得到SAXParser
          (5)解析XML文件

          例子:

          XML 文件:hr.xml
          <?xml version="1.0" encoding="GB2312" ?>
          <!-- 個人履歷表-->
          <resume>
          <person id="01">
          <name>張三</name>
          <birthday>03/24/1975</birthday>
          <phone>1111-1111</phone>
          <address>大連</address>
          </person>
          <person id="02">
          <name>李四</name>
          <birthday>9/26/1978</birthday>
          <phone>2222-2222</phone>
          <address>南京</address>
          </person>
          <person id="03">
          <name>王五</name>
          <birthday>11/09/1979</birthday>
          <phone>3333-3333</phone>
          <address>武漢</address>
          </person>
          </resume>


          import javax.xml.parsers.*;
          import org.xml.sax.*;
          import org.xml.sax.helpers.*;

          public class MySaxParser extends DefaultHandler {
          public static void main( String[] args ){
          try{
          // 創(chuàng)建一個handler
          DefaultHandler dh = new MySaxParser();
          // 創(chuàng)建SAXParserFactory
          SAXParserFactory spf = SAXParserFactory.newInstance();
          // 從factory 中得到SAXParser
          SAXParser sp = spf.newSAXParser();
          // 用自定義的handler 解析xml
          sp.parse( "08_02.xml", dh );
          }catch( Exception e ){
          e.printStackTrace();
          }
          }
          public void startDocument(){

          }
          /**
          * 當開始一個元素時打印出元素名和此元素的所有屬性
          */
          public void startElement(String uri,
          String localName,
          String qName,
          Attributes attributes)
          {
          System.out.print( qName + ":" );
          int len = 0;
          len = attributes.getLength();
          if( len > 0 ){
          System.out.print( "\t" + "attributes: " );
          for( int i=0; i<len; i++ )
          System.out.print( attributes.getQName(i) + "=" + attributes.getValue(i) + "\t" );
          //System.out.println();
          }
          }
          /**
          * 打印出元素內(nèi)容
          */
          public void characters(char[] ch,
          int start,
          int length)
          {
          String s = String.valueOf( ch, start, length );
          System.out.print( s );
          }
          public void endElement(String uri,
          String localName,
          String qName)
          {

          }
          public void endDocument(){

          }
          }


          posted on 2010-11-25 20:47 Ke 閱讀(264) 評論(0)  編輯  收藏 所屬分類: xml

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 宣恩县| 黑河市| 河北省| 永和县| 陕西省| 巴里| 略阳县| 十堰市| 灵台县| 棋牌| 霍林郭勒市| 盈江县| 察雅县| 汉阴县| 积石山| 盘山县| 武陟县| 洞口县| 宜阳县| 雅安市| 龙川县| 长宁区| 辰溪县| 柳河县| 西青区| 邵阳市| 安乡县| 乌什县| 阿坝县| 达拉特旗| 黎平县| 虹口区| 封丘县| 聂拉木县| 大兴区| 浮梁县| 遂川县| 麻城市| 高青县| 义马市| 上饶县|