<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 117  文章 - 72  trackbacks - 0

    聲明:原創作品(標有[原]字樣)轉載時請注明出處,謝謝。

    常用鏈接

    常用設置
    常用軟件
    常用命令
     

    訂閱

    訂閱

    留言簿(7)

    隨筆分類(130)

    隨筆檔案(123)

    搜索

    •  

    積分與排名

    • 積分 - 155536
    • 排名 - 390

    最新評論

    [標題]:[原]SAX使用示例
    [時間]:2009-4-25
    [摘要]:本文介紹了SAX解析XML的方法。還闡述了創建XMLReader兩種方法。一種是使用javax.xml.parsers.SAXParser驅動,另一種是使用第三方驅動org.apache.xerces.parsers.SAXParser。
    [關鍵字]:XML, Java,SAX,SAX Driver,SAX 驅動 , XMLReader,
    xerces,SAX2.0,JAXP,
    "System property org.xml.sax.driver not specified",
    "SAX2 driver class org.apache.xerces.parsers.SAXParser not found"
    [環境]:SAX 2.0 ,Xerces-J 2.9.1
    [作者]:Winty (wintys@gmail.com) http://www.tkk7.com/wintys

    [正文]:
        1、SAX2.0使用org.xml.sax.XMLReader接口代替了Parser接口。如果要使用SAX解析XML,那么首先要獲得XMLReader的一個實現對象。
       
        (1)、使用javax.xml.parsers.SAXParser創建XMLReader
            Sun JDK提供了javax.xml.parsers.SAXParser,由SAXParser可以獲取一個XMLReader。由于javax.xml.parsers.SAXParser是JDK自帶驅動,所以,直接編譯就可以運行了。           
    SAXParserFactory factory = SAXParserFactory.newInstance();
    factory.setValidating(true);//開啟驗證XML功能
    SAXParser parser = factory.newSAXParser();
    XMLReader reader = parser.getXMLReader();

        (2)、使用第三方驅動。本例使用Xerces驅動:               org.apache.xerces.parsers.SAXParser。
            Xerces驅動下載地址:http://xerces.apache.org/xerces2-j/。
            下載后,找到xercesImpl.jar,并將其加入到classpath路徑中。如果不加入classpath路徑,可以在編譯運行時指定xercesImpl.jar的位置。例:
    javac -cp "xercesImpl.jar;." SAXDemo.java
    java -cp "xercesImpl.jar;." SAXDemo

            此時,創建XMLReader代碼如下:
    XMLReader reader = XMLReaderFactory.createXMLReader();
            但是運行時要指定驅動的位置:
    java -Dorg.xml.sax.driver=org.apache.xerces.parsers.SAXParser SAXDemo

            也可以在代碼中指定具體驅動:
    String driver = "org.apache.xerces.parsers.SAXParser";
    XMLReader reader = XMLReaderFactory.createXMLReader(driver);
            或者直接創建一個XMLReader:
    XMLReader reader = new org.apache.xerces.parsers.SAXParser();
        2、得到XMLReader對象之后就可以解析XML了。SAX是基于事件的,所以,還要設置內容事件處理器ContentHandler和其它事件處理器,DefaultHandler是對ContentHandler等事件處理接口的一個默認實現,如果熟悉AWT/Swing事件處理機制,便不難理解。當然還需要一個InputSource來指定所要解析的XML文件。
    reader.setFeature("http://xml.org/sax/features/validation", false);
    reader.setContentHandler(mySAXHandler);
    reader.setErrorHandler(mySAXHandler);

    reader.parse(input);//input是InputSouce類型
       3、SAX解析XML完整的代碼實現(注釋中包含使用Xerces驅動的方法,可根據需要刪除或選用):
    /**
     * SAX使用示例
     *
     *Usage:
     *如果未用到Xerces驅動,則直接編譯運行。
     *如果用Xerces驅動,則編譯運行如下:
     * javac -cp "xercesImpl.jar;." SAXDemo.java
     * java -cp "xercesImpl.jar;." SAXDemo
     *
     * @version 2009-4-25
     * @author Winty(wintys@gmail.com)
     */
    import java.io.*;

    import javax.xml.parsers.SAXParserFactory;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.ParserConfigurationException;

    import org.xml.sax.XMLReader;
    import org.xml.sax.InputSource;
    import org.xml.sax.SAXException;
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXParseException;

    import org.xml.sax.helpers.DefaultHandler;
    import org.xml.sax.helpers.XMLReaderFactory;

    public class SAXDemo extends DefaultHandler{
        Writer writer;
        InputSource input;

        public SAXDemo(InputSource input ,  Writer writer){
            this.input = input;
            this.writer = writer;
        }

        public static void main(String[] args)throws Exception{
            InputSource input;
            Writer writer;
            SAXDemo saxDemo;

            input = new InputSource(new FileReader("cdcatalog.xml"));
            writer = new OutputStreamWriter(System.out);
            //writer = new FileWriter("result.txt");
            saxDemo= new SAXDemo(input , writer);

            saxDemo.parse();
        }

        public void parse(){
            XMLReader reader;
            try{
                reader = getXMLReader_Java();

                /*方法2:
                使用Xerces驅動:org.apache.xerces.parsers.SAXParser,
                需指定:java -cp "xercesImpl.jar;." SAXDemo
                */
                //如果使用Xerces驅動,則去除相應方法的注釋即可。
                //reader = getXMLReader_Xerces1();
                //reader = getXMLReader_Xerces2();
                //reader = getXMLReader_Xerces3();
               
                MySAXHandler mySAXHandler = new MySAXHandler(writer);
                reader.setFeature("http://xml.org/sax/features/validation", false);
                reader.setContentHandler(mySAXHandler);
                reader.setErrorHandler(mySAXHandler);

                reader.parse(input);
            }catch(SAXException e){
                System.err.println(e.getMessage());
            }catch(IOException e){
                System.err.println(e.getMessage());
            }
        }

        //方法1:使用javax.xml.parsers.SAXParser驅動
        private XMLReader getXMLReader_Java()throws SAXException {
            XMLReader reader = null;
            try{
                SAXParserFactory factory = SAXParserFactory.newInstance();
                factory.setValidating(true);
                SAXParser parser = factory.newSAXParser();
                reader = parser.getXMLReader();
            }catch(ParserConfigurationException e){
                System.err.println(e.getMessage());
            }

            return reader;
        }

        /**
         *方法2-1:
         */
        /*private XMLReader getXMLReader_Xerces1()throws SAXException{
            String driver = "org.apache.xerces.parsers.SAXParser";

            return XMLReaderFactory.createXMLReader(driver);
        }*/

        /* 方法2-2:
         * 還需指定driver類: java -Dorg.xml.sax.driver=org.apache.xerces.parsers.SAXParser
         */
        /*private XMLReader getXMLReader_Xerces2()throws SAXException{
            return XMLReaderFactory.createXMLReader();
        }*/

        /**
         * 方法2-3:
         * 還需指定:javac -cp "xercesImpl.jar;."
         */
        /*private XMLReader getXMLReader_Xerces3()throws SAXException{
            return (new org.apache.xerces.parsers.SAXParser());
        }*/
    }

    class MySAXHandler extends DefaultHandler{
        private Writer writer;

        public MySAXHandler(Writer writer){
            this.writer = writer;
        }

        public void startDocument()throws SAXException{
            try{
                writer.write("開始解析XML\n");
            }catch(IOException e){
                System.err.println(e.getMessage());
            }
        }

        public void endDocument()throws SAXException{
            try{
                writer.write("\n解析XML結束");
                writer.close();
            }catch(IOException e){
                System.err.println(e.getMessage());
            }
        }

        public void startElement(String uri,
                                             String localName,
                                             String qName,
                                             Attributes attributes)
            throws SAXException{

            try{
                writer.write("<" + qName + ">");
            }catch(IOException e){
                System.err.println(e.getMessage());
            }
        }

        public void endElement(String uri,
                                            String localName,
                                            String qName)
            throws SAXException{

            try{
                writer.write("</" + qName + ">");
            }catch(IOException e){
                System.err.println(e.getMessage());
            }
        }

        public void characters(char[] ch,int start,int length)throws SAXException{
            try{
                String str = new String(ch , start , length);
                writer.write(str);
            }catch(IOException e){
                System.err.println(e.getMessage());
            }
        }

        public void error(SAXParseException e)throws SAXException{
            System.err.println(e.getMessage());
        }

        public void warning(SAXParseException e)throws SAXException{
            System.err.println(e.getMessage());
        }

        public void fatalError(SAXParseException e)throws SAXException{
            System.err.println(e.getMessage());
        }
    }

    附件下載(附件內容:xercesImpl.jar、SAXDemo.java、cdcatalog.xml):SAXDemo.zip
    原創作品,轉載請注明出處。
    作者:Winty (wintys@gmail.com)
    博客:http://www.tkk7.com/wintys

    posted on 2009-04-26 19:18 天堂露珠 閱讀(2557) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 自拍偷自拍亚洲精品播放| 亚洲色欲色欱wwW在线| 久99久无码精品视频免费播放| 四虎成人免费观看在线网址| 日本亚洲色大成网站www久久| 亚洲最大免费视频网| 亚洲成人福利网站| 欧美男同gv免费网站观看| 狠狠色香婷婷久久亚洲精品| 亚洲免费观看在线视频| 亚洲人成7777| 免费一级毛片免费播放| 一级毛片a免费播放王色电影| 久久99亚洲综合精品首页| 在线观看免费无码视频| 亚洲va在线va天堂va四虎| 亚洲黄色片免费看| 亚洲熟妇少妇任你躁在线观看| 日本二区免费一片黄2019| 一个人看的www在线免费视频| 亚洲无av在线中文字幕| 少妇人妻偷人精品免费视频| 亚洲第一页在线视频| 成人免费看黄20分钟| 免费看又黄又爽又猛的视频软件| 亚洲午夜国产精品无码老牛影视| 精品一区二区三区无码免费视频 | 亚洲女人初试黑人巨高清| 午夜视频免费成人| 成人国产精品免费视频| 日韩亚洲Av人人夜夜澡人人爽| 黄色成人网站免费无码av| 草久免费在线观看网站| 亚洲国产精品国自产电影| 最近中文字幕mv免费高清视频7 | 亚洲三级中文字幕| 免费国产综合视频在线看| 免费一级毛片无毒不卡| 亚洲精品无码国产片| 国产亚洲精品美女久久久| 一个人免费观看视频www|