具體解釋XML解析(一)—解析接口淺析


    在DRP項目中接觸到了一個XML解析工具DOM4J,它作為解析工具的據說性能很優秀。可是剛剛接觸解析工具不久,而且也沒有使用過其它的解析工具。因此對於DOM4J的性能沒有直接的感受(沒有參照物)。只是,本篇博客先臨時不直接講DOM4J。

之前說過,對於工具特別是優秀的工具,我們要學習的不僅僅是使用而已,而須要更深層次的學習。好了,開始吧,首先我們要先了解一下解析器。


解析器

    解析器的作用就是將XML文檔轉換為應用程序可操作的對象。即讀入一個XML文檔並分析其結構。然后,應用程序通過解析接口訪問或者操作XML文檔。

以下以DOM為例,了解一下解析器和解析接口在應用中的位置。


基於DOM(Document Object  Model)

    DOM之前的博客有過介紹了,即文檔對象模型。

XML轉換是通過解析器完畢的,之后我們才干對XML文檔進行讀取操作。使用DOM操作XML文檔主要須要通過下面幾種操作:載入XML文檔→遍歷XML文檔→操作控制XML文檔節點(增、刪、改)。


    DOM基本接口:

    Document:是對文檔進行操作的接口,同一時候該節點是DOM對象樹的根節點。提供了對文檔中的數據進行訪問和操作的入口。另外。元素、節點、凝視、處理指令都無法脫離文檔的上下文關系而獨立存在。

所以在Document接口還提供了創建其它節點對象的方法。
    Node:代表DOM樹中的一個節點。Node 接口在整個DOM樹中具有舉足輕重的地位,DOM接口中有非常大一部分接口是從Node接口繼承過來的,比如,Element、Attr、 CDATASection等接口,都是從Node繼承過來的。          
    NodeList:提供了對節點集合的抽象定義。它並不包括怎樣實現這個節點集的定義。

NodeList用於表示有順序關系的一組節點,比方某個節點的子節點序列。在 DOM中。NodeList的對象是"live"的,換句話說,對文檔的改變,會直接反映到相關的NodeList對象中。比如,假設通過DOM獲得一個 NodeList對象,該對象中包括了某個Element節點的全部子節點的集合,那么,當再通過DOM對Element節點進行操作(加入、刪除、修改 節點中的子節點)時,這些改變將會自己主動地反映到NodeList對象中,而不需DOM應用程序再做其它額外的操作。


    NamedNodeMap:表示能夠通過名字來訪問的一組節點集合。

    DOM接口優缺點分析

    首先我們要了解DOM是要在內存中建立文檔樹。這是它的特點的決定性因素。

由於。樹在內存中的存在是持久的。所以。這就保證了DOM接口隨機訪問的特點。同一時候,也是由於樹在內存中的存在。因此對於大型的XML文檔的解析會耗費內存。而接下來介紹的SAX接口則與DOM接口全然相反。

基於SAX(Simple API for XML)

    相對與SAX是一種輕量型的方法。它針對的就是DOM接口處理大文檔時比較費時、費力、非資源的問題。

它是一種替代。

SAX接口依序讀入文件並產生對應的事件。

  主要接口:

    SAXParserFactory:用來依照系統屬性中定義的創建一個分析器實例。


    Parser:定義了類似setDocumentHandler的方法來創建事件處理函數。
  DocumentHandler :當分析器遇到XML文檔中的標記時激活該接口中的startDocument,endDocument。startElement,endElement等方法。
    ErrorHandler:當分析器遇到不用的錯誤時。就會激活error、fatalError等方法。


    DTDHandler:處理DTD中定義時,調用該接口中的方法。

    優缺點分析

    這樣的處理的長處很類似於流媒體的長處。分析可以馬上開始,而不是等待全部的數據被處理。

並且,因為應用程序僅僅是在讀取數據時檢查數據, 因此不需 要將數據存儲在內存中。這對於大型文檔來說是個巨大的長處。其實。應用程序甚至不必解析整個文檔;它可以在某個條件得到滿足時停止解析。一般來說,SAX 比 DOM 快很多。
    還有一方面,因為應用程序沒有以不論什么方式存儲數據,使用 SAX 來更改數據或在數據流中往后移是不可能的。


基於JDOM(Java Document Object Model)

    這樣的接口類似於DOM接口因此不再復述。

    總的來說,對於XML的訪問和操作要通過接口來實現,而解析器則實現接口。這也就是上面圖所表達的意思。另外關於選擇使用哪個接口來訪問XML數據,這還是依據各個接口的特點自己選擇。而且,博客里介紹的兩種接口特點還是比較鮮明的,因此適用的環境應該也比較清晰。對解析接口應該有所了解了。下篇介紹DOM4J。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM