中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      XML認證教程:SAX Parser

      時間:2024-10-08 04:40:33 IBM認證 我要投稿
      • 相關推薦

      XML認證教程:SAX Parser

        SAX 是由 XML-DEV 郵件列表的成員開發的,Java 版本由 David Megginson 維護。他們的目的是提供一種更自然的方法來使用 XML, 這種方法不會涉及到使用 DOM 的那種開銷。

        什么是 SAX

        讀取和操縱 XML 文件的標準方法是 DOM(“文檔對象模型”)。遺憾的是,這種方法需要讀取整個文件并將它存儲到樹結構中,因而效率不高、緩慢,并且會過度使用資源。

        一種替代方法是使用 Simple API for XML 或 SAX。SAX 允許正在讀取 文檔時處理該文檔,這避免了在采取操作之前需要等待存儲文檔的所有內容。

        SAX 是由 XML-DEV 郵件列表的成員開發的,Java 版本由 David Megginson 維護。他們的目的是提供一種更自然的方法來使用 XML, 這種方法不會涉及到使用 DOM 的那種開銷。

        結果是基于事件的 API。解析器將事件(譬如,元素的開始或結束)發送給 處理信息的事件處理程序。然后,應用程序自己可以處理數據。雖然原始文 檔保持不變,但 SAX 提供了操縱數據的方法,然后會將該方法導向另一個過 程或文檔。

        對于 SAX,沒有官方的標準;萬維網(W3C)或其它官方組織不維護 SAX, 但在 XML 社區中,它是一個事實上的標準。

        SAX 處理是如何工作的

        SAX 分析經過其的 XML 流,這非常象老式的自動收報機紙條。考慮以下 XML 代碼片斷:

        UNIX

        color

        一般情況下,SAX 處理器分析這段代碼將生成以下事件:

        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)

        SAX API 允許開發者捕獲這些事件,并對它們進行操作。

        SAX 處理涉及以下幾步:

        創建事件處理程序。

        創建 SAX 解析器。

        將事件處理程序分配給解析器。

        對文檔進行解析,將每個事件發送給處理程序。

        在SAX與DOM之間,如何選擇

        選擇 DOM 還是 SAX,這取決于幾個因素:

        應用程序的目的:如果必須對數據進行更改,并且作為 XML 將它輸出,則在大多數情況下,使用 DOM。與使用 XSL 轉換來完成的簡單結構更改不一樣,如果是對數據本身進行更改,則尤其應該使用 DOM。

        數據的數量:對于大文件,SAX 是更好的選擇。

        將如何使用數據:如果實際上只使用一小部分數據,則使用 SAX 將數據抽 取到應用程序中,這種方法更好些。另一方面,如果知道將需要向后引用已經 處理過的信息,則 SAX 可能不是正確的選擇。

        需要速度:通常,SAX 實現比 DOM 實現快。

        記住 SAX 和 DOM 不是互斥的,這一點很重要。可以使用 DOM 來創建事件的 SAX 流,可以使用 SAX 來創建 DOM 樹。事實上,大多數解析器實際常常使用 SAX 來創建 DOM 樹!

        使用 JAXP 來創建解析器

        接下來我們來看一下JAXP的SAX Parser是怎么樣工作的。

        首先聲明 XMLReader xmlReader。然后使用 SAXParserFactory 來創建 SAXParser。正是 SAXParser 給您了 XMLReader。

        import org.xml.sax.helpers.DefaultHandler;

        import javax.xml.parsers.SAXParser;

        import javax.xml.parsers.SAXParserFactory;

        import org.xml.sax.XMLReader;

        public class SurveyReader extends DefaultHandler

        {

        public SurveyReader() {

        }

        public static void main (String args[]) {

        XMLReader xmlReader = null;

        try {

        SAXParserFactory spfactory =

        SAXParserFactory.newInstance();

        spfactory.setValidating(false); //設置驗證選項,

        如果您的XML文件是有效文檔的話,

        就不用驗證.這將提高處理速度

        SAXParser saxParser = spfactory.newSAXParser();

        xmlReader = saxParser.getXMLReader();

        } catch (Exception e) {

        System.err.println(e);

        System.exit(1);

        }

        }

        }

        設置內容處理程序

        一旦創建了解析器,則需要將 SurveyReader 設置為內容處理程序,以便于 其接收事件。

        xmlReader 的 setContentHandler() 方法完成這項工作。

        ...

        xmlReader = saxParser.getXMLReader();

        xmlReader.setContentHandler(new SurveyReader());

        } catch (Exception e) {

        ...

        當然,對于內容處理程序,這不是唯一的選項。

        解析 InputSource

        為了對文件進行實際地解析,需要 InputSource。這個 SAX 類封裝了所有將要 處理的數據,所以不必擔心它來自哪里。

        現在,準備對文件進行實際解析。應用程序將封裝在 InputSource 中的文件傳遞給 parse(),然后應用程序會繼續運行。

        ...

        import org.xml.sax.InputSource;

        ...

        xmlReader = saxParser.getXMLReader();

        xmlReader.setContentHandler(new SurveyReader());

        InputSource source = new InputSource("surveys.xml");

        xmlReader.parse(source);

        } catch (Exception e) {

        ...

        可以編譯和運行該程序,但這時應該什么也沒有發生,因為應用程序還沒有定義任何事件。

        創建 ErrorHandler

        當然總會有可能在試圖進行解析時,數據有問題。在這樣的情況下,有一個處理程 序來處理錯誤和內容將是有幫助的。

        就如同創建內容處理程序一樣,可以創建出錯處理程序。通常,將作為 ErrorHandler 的單獨實例來創建它,但為了簡化該示例,出錯處理正是包含在 SurveyResults 中。由于該類繼承了 DefaultHandler 且沒有擴展 ContentHandler,所以這 種雙重用法是可能的。

        需要關注的事件有三個:警告、錯誤和致命錯誤。

        ...

        import org.xml.sax.SAXParseException;

        public class SurveyReader extends DefaultHandler

        {

        public SurveyReader() {

        }

        public void error (SAXParseException e) {

        System.out.println("Error parsing the file: "+e.getMessage());

        }

        public void warning (SAXParseException e) {

        System.out.println("Problem parsing the file: "+e.getMessage());

        }

        public void fatalError (SAXParseException e) {

        System.out.println("Error parsing the file: "+e.getMessage());

        System.out.println("Cannot continue.");

        System.exit(1);

        }

        }

        ....

        xmlReader.setContentHandler(new SurveyReader());

        xmlReader.setErrorHandler(new SurveyReader());

        //設置 ErrorHandler

        InputSource source = new InputSource("surveys.xml");

        ....

        public static void main (String args[]) {

        ...

        SAX 事件

        以下事件是常用的;它們都在 org.xml.sax 包的 HandlerBase 類中定義。

        startDocument 表示文檔開始。

        endDocument 表示文檔結束。

        startElement 表示元素開始。當一對標記中的起始標記中的所有內容被處理后,解析器 激發此事件。包括了標記名和其屬性。

        endElement 表示元素結束。

        characters 包含字符數據,類似于 DOM 的一個 Text 節點。

        還有更多的 SAX 事件:

        ignorableWhitespace 此事件類似于我們前面所討論的無用 DOM 節點。它與 character 事件的區別,好處是:如果您不需要空格符,您可以通過忽略這個事件來忽略所有的空格符。

        warning、error 和 fatalError 這三個事件表示了解析錯誤。您可根據需要來響應它們。

        setDocumentLocator 這個事件允許您存儲一個 SAX 的 Locator 對象。Locator 對象可以用來找出在文檔中確切發生事件的地方。

      【XML認證教程:SAX Parser】相關文章:

      XML認證考試知識點:Parser08-21

      XML入門教程10-22

      XML認證元素類型聲明05-28

      關于XML的入門教程10-06

      關于IBM XML認證考試的要點09-07

      XML名稱空間入門教程06-07

      MCSA認證教程詳解10-04

      IBM XML認證知識點:Dtd09-01

      關于XML入門教程:分析XM09-25

      關于XML的介紹08-29

      主站蜘蛛池模板: 亚洲熟女精品一区二区三区| 大安市| 国产真实二区一区在线亚洲| 日韩精品视频免费福利在线观看| 96精品免费视频大全| 极品美女尤物嫩模啪啪| 蜜桃一区二区三区高清| 插进去内射视频免费观看| 左权县| 博爱县| 宁陕县| 金秀| 人妖系列在线精品视频| 男女性搞视频网站免费| 日韩人妻高清福利视频| 亚洲色欲色欲欲www在线| 色偷偷av一区二区三区人妖| 日本亚洲成人中文字幕| 克东县| av天堂线上| 99在线无码精品秘 入口九色| 铁力市| 秋霞国产av一区二区三区| 南岸区| 宿松县| 日本女优在线观看一区二区三区 | 精品国产91久久综合| 亚洲一级无码AV毛片久久| 成人性色生活片免费毛片| 在线观看国产内射视频| 99精品国产自产在线观看| 亚洲欧美成人在线免费| 国产在线视频二区三区| 日本蜜桃视频在线观看| 狠狠亚洲超碰狼人久久老人| 国内精品人人妻少妇视频| 久久精品国产亚洲片| 重庆市| 天天中文字幕av天天爽| 欧美亚洲尤物久久综合精品| 国产精品成人无码a 无码|