飛艷小屋

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

          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 天外飛仙 閱讀(466) 評論(0)  編輯  收藏 所屬分類: XML
          主站蜘蛛池模板: 翼城县| 五寨县| 淮南市| 利辛县| 安吉县| 中西区| 黑河市| 营口市| 沙田区| 民权县| 惠州市| 枣庄市| 林芝县| 内乡县| 玛纳斯县| 白沙| 东宁县| 濉溪县| 浦东新区| 连城县| 安陆市| 离岛区| 米泉市| 中西区| 龙陵县| 白河县| 左贡县| 吐鲁番市| 商南县| 绵阳市| 阿鲁科尔沁旗| 巴青县| 宁远县| 盘锦市| 江孜县| 湖州市| 长寿区| 化德县| 新田县| 前郭尔| 兴山县|