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

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

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

    隨筆 - 14, 文章 - 0, 評論 - 15, 引用 - 0
    數據加載中……

    java&xml第四天,sax

    SAX(Simple API for XML用于XML的簡單API)
    由于提前學習了cocoon,時間上又經過了一個周末,想要寫得激情沒有剩下多少,這里簡單的回顧一下SAX的一些接口定義和用處吧!-_-#
    1、準備工作
          sax相關的類都封裝在org.xml.sax中,其中接口org.xml.sax.XMLReader是SAX2的核心類,你的xml解析器應該提供這個接口的實現類。比如"org.apache.xerces.parsers.SAXParser"這個類。
    2、sax的處理流程
          sax基本的處理方法是在解析之前注冊各種處理類(Handler),在解析的時候callback這些處理器,內容處理器就是其中最主要的一個。舉例來說明的話,如下的xml文檔:
    <?xml version="1.0"?>
      
    <samples>
        
    <server>UNIX</server>
        
    <monitor>color</monitor>
      
    </samples>
    他將會在解析的時候被轉化成如下的一串事件流:
        Start document
        Start element (samples)
        Characters (white space)
        Start element (server)
        Characters (UNIX)
        End element (server)
        Characters (white space)
        Start element (monitor)
        Characters (color)
        End element (monitor)
        Characters (white space)
        End element (samples)
    開發者要做的就是捕獲這些事件,然后做自己要做的事情。
    3、內容處理類
          org.xml.sax.ContentHandler
    package org.xml.sax;
    public interface ContentHandler
    {
        
    public void setDocumentLocator (Locator locator);
        
    public void startDocument ()throws SAXException;
        
    public void endDocument()throws SAXException;
        
    public void startPrefixMapping (String prefix, String uri) throws SAXException;
        
    public void endPrefixMapping (String prefix)throws SAXException;
           public void startElement (String namespaceURI, String localName,String qName, Attributes atts)
           throws SAXException;
        
    public void endElement (String namespaceURI, String localName,String qName)throws SAXException;
        
    public void characters (char ch[], int start, int length)throws SAXException;
        
    public void ignorableWhitespace (char ch[], int start, int length)throws SAXException;
        
    public void processingInstruction (String target, String data)throws SAXException;
        
    public void skippedEntity (String name)throws SAXException;
    }
    有一點要說明的就是ignorableWhitespace 這個方法是在遇到可以忽略的空白的時候回調的,但是如果xml文檔沒有定義DTD或者是Schema,那么這個方法將不會被調用,因為如果沒有文檔結構的定義,解析器又如何判斷哪些空白是可以忽略的呢。
    4、錯誤處理類
          ErrorHandler這個類提供兩個方法,warning和error,用于在處理解析過程發生的錯誤和警告,包括xml格式的錯誤和文檔結構檢查的錯誤。
    5、過濾器和寫入器
          org.xml.sax.XMLFilter這個接口擴展了XMLReader接口,添加了兩個新方法:
          public void setParent(XMLReader reader);
          public XMLReader getParent();
          他的意圖比較明顯,將一個已有的XMLReader作為上級解析器,他將得以在這個XMLReader執行捕獲sax事件之前捕獲他們,并作一些操作,最后在鏈向XMLReader的對象,這里的概念很像cocoon的內部實現。
          這里還要提到的一個類是:org.xml.sax.helpers.XMLFilterImpl這個類實現了XMLFilter接口,不僅如此,他還提供了ContentHandler,ErrorHandler等處理器的處理方法通道。也就是說,如果繼承XMLFilterImpl并覆蓋startElement方法,那么你寫得代碼將在實際的Reader執行startElement方法被執行之前被執行。下面是一個注冊Filter的例子:
    XMLReader reader = XMLReaderFactory.createXMLreader();
    MyFilter filter 
    = new MyFilter(reader.);
    filter.setContenHandler();

    注意在注冊內容處理類等類的時候,應該寫filter....
    另外,你當然也可以再寫一個filter2,而把filter作為parent傳入,這樣就構成了一個事件處理鏈。

          org.xml.sax.XMLWriter是一個實際的過濾器,他也是通過上面說到的方式:擴展XMLFilterImpl來實現的。具體的類除了XMLWriter外還有DataWriter,他擴展XMLWriter。
          需要注意的是這兩個類一般不用來做實際的寫入流操作,但是他們可以用于很好的表現sax處理鏈的中間結果,也就是快照snapshot
    6、sax的屬性和特征
          屬性和特征在XMLReader接口里面體現為:
          getFeature(String),setFeature(String,boolean)方法和getProperty(String),setProperty(String,Object)方法,用來控制解析過程的一些選項,比如是否進行DTD校驗。比如:
          reader.setFeature("reader.setFeature("

    posted on 2005-03-14 13:26 Boris-Java 閱讀(920) 評論(0)  編輯  收藏 所屬分類: java&xml

    主站蜘蛛池模板: 久久久久久久岛国免费播放| 毛片亚洲AV无码精品国产午夜| 99热在线日韩精品免费| 亚洲?v无码国产在丝袜线观看| 亚洲6080yy久久无码产自国产 | 四虎影视永久免费观看| 色哟哟国产精品免费观看 | 国产成人免费ā片在线观看| 亚洲日韩国产AV无码无码精品| 成年女人免费视频播放77777 | 亚洲an日韩专区在线| 全免费毛片在线播放| 亚洲 暴爽 AV人人爽日日碰| 午夜色a大片在线观看免费| 亚洲AV无码之国产精品| 一本色道久久88亚洲综合| 久青草国产免费观看| 亚洲va久久久噜噜噜久久天堂| 日本在线免费播放| 亚洲成综合人影院在院播放| 青青草免费在线视频| 美女视频黄频a免费观看| 中文字幕亚洲乱码熟女一区二区| 亚洲视频免费在线观看| 亚洲中文字幕久久精品蜜桃| 亚洲AV伊人久久青青草原| 成人性生交大片免费看好| 亚洲视频小说图片| 免费夜色污私人影院在线观看| 成人网站免费大全日韩国产| 久久亚洲精品中文字幕| 成年人性生活免费视频| 男女一边桶一边摸一边脱视频免费 | 无码A级毛片免费视频内谢| 亚洲宅男精品一区在线观看| 亚洲 国产 图片| 无码少妇精品一区二区免费动态| 亚洲欧美一区二区三区日产| 亚洲视频在线免费| free哆啪啪免费永久| 男女猛烈激情xx00免费视频|