飛艷小屋

          程序--人生--哲學___________________歡迎艷兒的加入

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            52 Posts :: 175 Stories :: 107 Comments :: 0 Trackbacks

          XML文檔樣本:


          <?xml version="1.0"?>
          <simple date="7/7/2000" >
          <name> Bob </name>
          <location> New York </location>
          </simple>


          代碼:
          package xmltest;
          import javax.xml.parsers.*;
          import org.xml.sax.*;
          import org.xml.sax.helpers.*;
          import java.io.*;

          ?


          public class SaxTest extends DefaultHandler {


          // 重載DefaultHandler類的方法
          // 以攔截SAX事件通知。
          //
          // 關于所有有效事件,見org.xml.sax.ContentHandler
          //
          public void startDocument( ) throws SAXException {
          System.out.println( "SAX Event: START DOCUMENT" );
          }

          public void endDocument( ) throws SAXException {
          System.out.println( "SAX Event: END DOCUMENT" );
          }

          public void startElement( String namespaceURI,
          String localName,
          String qName,
          Attributes attr ) throws SAXException {
          System.out.println( "SAX Event: START ELEMENT[ " +
          localName + " ]" );

          // 如果有屬性,我們也一并打印出來...
          for ( int i = 0; i < attr.getLength(); i++ ){
          System.out.println( " ATTRIBUTE: " +
          attr.getLocalName(i) +
          " VALUE: " +
          attr.getValue(i) );
          }

          }

          public void endElement( String namespaceURI,
          String localName,
          String qName ) throws SAXException {
          System.out.println( "SAX Event: END ELEMENT[ " +
          localName + " ]" );
          }

          public void characters( char[] ch, int start, int length )
          throws SAXException {

          System.out.print( "SAX Event: CHARACTERS[ " );

          try {
          OutputStreamWriter outw = new OutputStreamWriter(System.out);
          outw.write( ch, start,length );
          outw.flush();
          } catch (Exception e) {
          e.printStackTrace();
          }

          System.out.println( " )" );

          }


          public static void main( String[] argv ){

          System.out.println( "Example1 SAX Events:" );
          try {

          // SAXParserFactory spFactory = SAXParserFactory.newInstance();
          // SAXParser sParser = spFactory.newSAXParser();


          // 建立SAX 2解析器...
          XMLReader xr = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");

          // 安裝ContentHandler...
          xr.setContentHandler( new SaxTest() );

          // 解析文件...
          xr.parse( new InputSource(
          new FileReader( "exampleA.xml" )) );


          }catch ( Exception e ) {
          e.printStackTrace();
          }

          }

          }
          ?當前SAX API有兩個版本。第二版中的類名和方法名與第一版都有出入,但是代碼的結構是一樣的。
          ??? SAX是一套API,它不是一個解析器,所以這個代碼在XML解析器中是通用的。要讓示例跑起來,你將需要一個支持SAX v2的XML解析器。我用Apache的Xerces解析器.代碼如下
          // 建立SAX 2解析器...
          XMLReader xr = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");

          // 安裝ContentHandler...
          xr.setContentHandler( new SaxTest() );
          SAX API 的說明書通俗易讀。它包含了很多的詳細內容。而使用SAX API的主要任務就是創建一個實現ContentHandler接口,一個供XML 解析器調用以將分析XML文檔時所發生的SAX事件分發給處理程序的回調接口。

          方便起見,SAX API也提供了一個已經實現了ContentHandler接口的DefaultHandler適配器類。

          一但實現了ContentHandler或者擴展了DefaultHandler類,你只需直接將XML解析器解析一個特定的文檔即可。

          我們的第一個例子擴展DefaultHandler將每個SAX事件打印到控制臺。這將給你一個初步的映象,以說明什么SAX事件將會發生及以怎樣的順序發生。

          posted on 2006-08-16 13:29 天外飛仙 閱讀(463) 評論(0)  編輯  收藏 所屬分類: XML
          主站蜘蛛池模板: 永福县| 阿坝县| 左权县| 五华县| 闸北区| 凉城县| 花垣县| 随州市| 环江| 湄潭县| 大方县| 白河县| 馆陶县| 长汀县| 霍邱县| 杨浦区| 巴林右旗| 蒙城县| 平泉县| 隆德县| 昌都县| 泰和县| 富阳市| 克拉玛依市| 温泉县| 曲水县| 灯塔市| 温宿县| 东方市| 永福县| 沙田区| 扬中市| 镇雄县| 嘉义市| 中牟县| 甘洛县| 灵台县| 陵水| 昌平区| 五原县| 香河县|