posts - 28,comments - 3,trackbacks - 0
          Simple API for XML
          SAX是一套API,不是一個解析器,所以這個代碼在XML解析器中是通用的。要讓示例跑起來,需要一個支持SAX v2的XML解析器。實現了SAX的解析器有很多,比如Apache的Xerces,Oracle的XML Parser等等。
          解析時需實現ContentHandler或者擴展DefaultHandler類,將XML解析器解析一個特定的文檔即可。


          示例:
          xml文件
          <?xml version="1.0"?>
          <simple date="7/7/2000" >
             <name> Bob </name>
             <location> New York </location>
          </simple>

          接下來,我們看看第一個XML解析例子的代碼:


          import org.xml.sax.*;
          import org.xml.sax.helpers.*;
          import java.io.*;


          public class Example1 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 {

                   // 建立SAX 2解析器...
                   XMLReader xr = XMLReaderFactory.createXMLReader();

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

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


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

             }

          }

          最后,就得到了運行第一個例子解析我們的XML樣本文檔所產生的輸出:


          Example1 SAX Events:
          SAX Event: START DOCUMENT
          SAX Event: START ELEMENT[ simple ]
             ATTRIBUTE: date VALUE: 7/7/2000
          SAX Event: CHARACTERS[
              ]
          SAX Event: START ELEMENT[ name ]
          SAX Event: CHARACTERS[  Bob  ]
          SAX Event: END ELEMENT[ name ]
          SAX Event: CHARACTERS[
              ]
          SAX Event: START ELEMENT[ location ]
          SAX Event: CHARACTERS[  New York  ]
          SAX Event: END ELEMENT[ location ]
          SAX Event: CHARACTERS[
          ]
          SAX Event: END ELEMENT[ simple ]
          SAX Event: END DOCUMENT

          如你所見,SAX解析器會為每個在XML文檔中出現的SAX事件調用正確的ContentHandler成員方法。

          posted on 2007-05-31 16:20 李大嘴 閱讀(423) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 类乌齐县| 资阳市| 石楼县| 玉环县| 珠海市| 刚察县| 澄城县| 阿拉善左旗| 嘉祥县| 吉水县| 油尖旺区| 翁源县| 东丰县| 永登县| 平邑县| 黄大仙区| 潮安县| 福鼎市| 雅安市| 聂拉木县| 镇平县| 望谟县| 黔西| 依兰县| 万宁市| 尚志市| 九台市| 台州市| 遂川县| 阳朔县| 登封市| 丰城市| 延吉市| 丹阳市| 微博| 凤山县| 连平县| 泰兴市| 景宁| 上蔡县| 长治县|