XML DOM解析 基礎概念


XML DOM解析 基礎概念

 

DOM和SAX

  W3C制定了一套書寫XML分析器的標准接口規范——DOM

  除此以外,XML_DEV郵件列表中的成員根據應用的需求也自發地定義了一套對XML文檔進行操作的接口規范——SAX

  這兩種接口規范各有側重,互有長短,應用都比較廣泛。

 

  應用程序開發過程中,應用程序不是直接對XML文檔進行操作的,而是首先由XML分析器對XML文檔進行分析。

  然后,應用程序通過XML分析器所提供的DOM接口或SAX接口對分析結果進行操作,從而間接地實現了對XML文檔的訪問。

 

 

 

DOM介紹 優缺點分析

  DOM: Document Object Model 文檔對象模型。

  在應用程序中,基於DOM的XML分析器將一個XML文檔轉換成一個對象模型的集合(通常稱DOM樹),應用程序通過對這個對象模型的操作,來實現對XML文檔數據的操作。

  通過DOM接口,應用程序可以在任何時候訪問XML文檔中的任何一部分數據,因此,這種利用DOM接口的機制也被稱作隨機訪問機制

  DOM樹所提供的隨機訪問方式給應用程序的開發帶來了很大的靈活性,它可以任意地控制整個XML文檔中的內容。

  然而,由於DOM分析器把整個XML文檔轉化成DOM樹放在了內存中,因此,當文檔比較大或結構比較復雜時,對內存的需求就比較高。

  而且,對於結構復雜的樹的遍歷也是一項耗時的操作。

  所以,DOM分析器對機器性能的要求比較高,實現效率不十分理想。

  由於DOM分析器所采用的樹結構的思想與XML文檔的結構相吻合,同時鑒於隨機訪問所帶來的方便,因此,DOM分析器還是有很廣泛的應用價值的。

 

DOM的組成

  對於XML應用開發來說,DOM就是一個對象化的XML數據接口,一個與語言無關、與平台無關的標准接口規范。

  DOM定義了HTML文檔和XML文檔的邏輯結構,給出了一種訪問和處理這兩種文檔的方法。

  文檔代表的是數據,而DOM則代表了如何去處理這些數據。

  作為W3C的標准接口規范,目前,DOM由三部分組成,包括:核心(core)、HTML接口和XML接口。

  核心部分是結構化文檔比較底層對象的集合,這一部分所定義的對象已經完全可以表達出任何HTML和XML文檔中的數據了。

  HTML接口和XML接口兩部分則是專為操作具體HTML文檔和XML文檔所提供的高級接口。

 

DOM樹

  一個XML文檔及其所對應的DOM樹如下:

 

<?xml version="1.0" encoding="utf-8"?>

<bookstore>
    <book category="children">
          <title lang="en">Harry Potter</title> 
          <author>J K. Rowling</author> 
          <year>2005</year> 
          <price>29.99</price> 
    </book>

    <book category="cooking">
          <title lang="en">Everyday Italian</title> 
          <author>Giada De Laurentiis</author> 
          <year>2005</year> 
          <price>30.00</price> 
    </book>

    <book category="web">
          <title lang="en">Learning XML</title> 
          <author>Erik T. Ray</author> 
          <year>2003</year> 
          <price>39.95</price> 
    </book>

    <book category="web">
          <title lang="en">XQuery Kick Start</title> 
          <author>James McGovern</author> 
          <author>Per Bothner</author> 
          <author>Kurt Cagle</author> 
          <author>James Linn</author> 
         <author>Vaidyanathan Nagarajan</author> 
          <year>2003</year> 
          <price>49.99</price> 
    </book>

</bookstore>

 

 

 

  要嚴格區分XML文檔樹中的根節點與根元素節點:

  文檔(根節點)和根元素節點是兩回事。

  根節點代表整個文檔,是我們解析XML文檔的入口,通過它獲取到Document對象;

  根元素節點代表XML文檔的根元素,必須要在獲得Document對象之后才能一層一層地去訪問它的元素。

 

DOM模型結構

  最常見的節點類型:

  元素:元素是XML的基本構建。

  元素可以有其他元素、文本節點或兩者兼有來作為其子節點。

  元素節點還是可以有屬性的唯一類型的節點

  屬性:屬性節點包含關於元素節點的信息,但實際上,不認為它是元素的子節點。

  文本:確切來講,文本節點是文本。它可以包含許多信息或僅僅是空白。

  文檔(根節點) :文檔節點是整個文檔中所有其他節點的父節點。(根節點不等於根元素節點)。

  較不常見的節點類型:CDATA、注釋、處理指令。

 

DOM的四個基本接口

  在DOM接口規范中,有四個基本的接口:Document, Node, NodeList, NamedNodeMap。

Document

  Document接口是對文檔進行操作的入口,它是從Node接口繼承過來的。 

Node

  Node接口是其他大多數接口的父類。

  在DOM樹中,Node接口代表了樹中的一個節點。

NodeList

  NodeList接口是一個節點的集合,它包含了某個節點中的所有子節點。

  它提供了對節點集合的抽象定義,並不包含如何實現這個節點集的定義。

  NodeList用於表示有順序關系的一組節點,比如某個節點的子節點序列。

  在DOM中,NodeList的對象是live的,對文檔的改變,會直接反映到相關的NodeList對象中。

 

NamedNodeMap

  NamedNodeMap接口也是一個節點的集合,通過該接口,可以建立節點名和節點之間的一一映射關系,從而利用節點名可以直接訪問特定的節點,這個接口主要用在屬性節點的表示上。

  盡管NamedNodeMap所包含的節點可以通過索引來進行訪問,但是這只是提供了一種枚舉方法,NamedNodeMap所包含的節點集中節點是無序的。

  與NodeList相同,在DOM中,NamedNodeMap對象也是live的

 

解析器基礎

  XML解析器實際上就是一段代碼,它讀入一個XML文檔並分析其結構。

  分類:

  帶校驗的解析器。

  不帶校驗的解析器。

  支持DOM的解析器(W3C的官方標准)

  支持SAX的解析器(事實上的工業標准)

 

參考資料

  聖思園張龍老師XML視頻教程。

  w3school XML DOM 教程:

  http://www.w3school.com.cn/xmldom/index.asp

  Java API文檔:

  http://docs.oracle.com/javase/7/docs/api/index.html

 


免責聲明!

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



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