DOM的結構
發(fā)表時間:2024-02-04 來源:明輝站整理相關軟件相關文章人氣:
[摘要]在DOM 中,我們將代表XML 文件的程序設計對象,稱為節(jié)點(nodes)。當Internet Explorer 5 處理被鏈接的XML 文件并儲存于DOM 中時,它會為XML 文件的每一個基本組件建立一個節(jié)點。這些基本組件包括了元素、屬性,與處理指令DOM 會使用不同形態(tài)的節(jié)點來代表不同形態(tài)的X...
在DOM 中,我們將代表XML 文件的程序設計對象,稱為節(jié)點(nodes)。當Internet Explorer 5 處理被鏈接的XML 文件并儲存于DOM 中時,它會為XML 文件的每一個基本組件建立一個節(jié)點。這些基本組件包括了元素、屬性,與處理指令DOM 會使用不同形態(tài)的節(jié)點來代表不同形態(tài)的XML 組件。例如,元素是儲存在Element 節(jié)點中,而屬性則是儲存在Attribute 節(jié)點中。表格9-1 列出了這些節(jié)點類型最重要的部分。
節(jié)點形態(tài) 節(jié)點對象所代表的XML文件組件 節(jié)點名稱(nodeName 對象屬性) 節(jié)點的值(nodeValue 對象屬性)
文件(Document) 文件階層中的根節(jié)點(代表整個XML 文件) #document Null
元素(Element) 元素 元素形態(tài)名稱(例如,BOOK) null(包含在元素中的(Element)任何字符數(shù)據(jù),是位在一個或多個子文字節(jié)點中)
文字(Text) 屬于由這個節(jié)點的父節(jié)點所代表的元素,屬性及實體的文字。 #text 父XML 組件的文字
屬性(Attribute) 屬性 (以及其它的名值對,像處理指令中的名字與值) 屬性名稱 (如Binding) 屬性值(例如hardcover)
處理指令 (Processing Instruction ) 處理指令(XML 宣告或自訂的處理指令) 處理指令的目標(例如xml) 除了目標之外整個處理指令的內(nèi)容(例如,Version "1.0")
批注(Comment) 批注 #comment 在批注符號中的文字
CDATA 區(qū)段(CDATASection) CDATA 區(qū)段 #cdata-section CDATA 區(qū)段中的內(nèi)容
文件類型(Document
Type) 文件形態(tài)宣告 出現(xiàn)在DOCTYPE 宣告中的根元素的名字(例如INVENTORY) Null
實體(Entity) DTD 中的實體宣告 實體名稱(例如image) null (實體值是位在子文字節(jié)點中)
標簽 DTD 中的標簽宣告 標簽名稱(例如BMP) > null (卷標的系統(tǒng)literal(Notation)是位在名為SYSTEM 的 子Attribute node中)
表格9-1 用來表示不同XML 文件組件的基本節(jié)點形態(tài)。這些類型的每一個節(jié)點都是一個程序設計對象,提供了存取相關組件的屬性與方法。
你可以從節(jié)點中的nodeName 屬性獲得每個節(jié)點的名稱(詳列于表格9-1 中的第三欄)。這個名稱是以字符#起始,代表那些未在文件中命名的XML 組件節(jié)點的標準名稱。(例如,在XML文件中的批注并未命名。因此,DOM 將使用標準名稱#comment。)其它節(jié)點的名稱則是由指定到XML 文件中相對應組件的名稱衍生而來。(例如,代表形態(tài)BOOK 元素的元素節(jié)點也可以命名為BOOK。
你可以從節(jié)點的nodeValue 屬性取得每個節(jié)點的節(jié)點值(列于表格9-1 中最后一欄)。如果XML組件擁有一個相關的值(例如,屬性),該值將會被儲存于節(jié)點的節(jié)點值中。如果XML 組件并沒有節(jié)點值(例如,元素),則DOM 將會把節(jié)點值設成null。在本章稍后,你將學到更多有關列于表格9.1 中各種節(jié)點類型的相關知識。
DOM 會將XML 文件的節(jié)點建構成樹狀的階層結構,反映出XML 文件本身的階層結構。DOM將會建立一個單一文件節(jié)點來表示整個XML 文件,并將其視為階層結構的根節(jié)點。注意,XML元素的邏輯階層結構,包含了整個XML 文件,結構中的根節(jié)點,只是DOM 節(jié)點的階層結構的一個分枝。
參考 列表9-1 中的XML 文件范例。(你可以在隨書光盤的 Dom.xml 檔案中找到列表9-1。)這份文件包含了XML 宣告、批注,以及包含子元素與屬性的節(jié)點元素。
下圖展示了節(jié)點的階層組織,該節(jié)點是DOM 所建立用來呈現(xiàn)這份范例文件。對于范例文件中的每個組件,該圖指出了用來表現(xiàn)每個組件的節(jié)點形態(tài)(例如,文件、批注和元素)以及節(jié)點的名稱(下圖括號中所示-例如#document、#comment 與INVENTORY)。
[page_break]Inventory Dom.xml
lt;?xml version="1.0"?>
lt;!--File Name:Inventory Dom.xml -->
lt;INVENTORY>
lt;BOOK Binding="mass market paperback">
lt;TITLE> The Adventures of Huckleberry Finn
lt;AUTHOR Born="1835"> Mark Twain
lt;PAGES> 298
lt;PRICE> $5.49
lt;/BOOK>
lt;BOOK Binding="trade paperback">
lt;TITLE> The Marble Faun
lt;AUTHOR Born="1804"> Nathaniel Hawthorne
lt;PAGES> 473
lt;PRICE> $10.95
lt;/BOOK>
lt;BOOK Binding="hardcover">
lt;TITLE> Moby-Dick
lt;AUTHOR Born="1819"> Herman Melville
lt;PAGES> 724
lt;PRICE> $9.95
lt;/BOOK>
lt;/INVENTORY>
每個節(jié)點,就像可程序化的對象,提供了屬性和方法,讓你可以存取、顯示、管理,和取得對應到XML 組件上的信息。例如,nodeName 和nodeValue 屬性(表9-1 所示)提供了元素的名稱及內(nèi)含值。
所有形態(tài)的節(jié)點共同分享一組公共的屬性與方法。這些屬性與方法一般是設計來偕同節(jié)點一起運作。表格9-2 列出了一些比較有用的共同屬性。在本章稍后你將獲得有關這些屬性的更多信息及范例。
屬性 描述 范例
attributes 該節(jié)點的所有非屬性的子節(jié)點的NamedNodeMap 集合 AttributeNode =Element.attributes.getNamedItem ("Binding");
childNodes 該節(jié)點的所有非屬性的子節(jié)點的NodeList 集合 FirstNode =Element.childNodes (0);
dataType 該節(jié)點的數(shù)據(jù)類型(只適用于某些類型Attribute 節(jié)點) AttributeType =Attribute.dataType;
firstChild 該節(jié)點的第一個非屬性的子節(jié)點 FirstChildNode =Element.firstChild;
lastChild 該節(jié)點的最后一個非屬性的子節(jié)點 LastChildNode =Element.lastChild;
nextSibling 與本節(jié)點位于同一層級的后繼前一節(jié)點 NextElement =Element.nextSibling;
nodeName 節(jié)點的名稱 ElementName =Element.nodeName;
nodeType 表示該節(jié)點類型的數(shù)值碼 NodeTypeCode =Node.nodeType;
nodeTypeString 包含該節(jié)點類型的字符串,以小寫字母撰寫(例如,"element"或"attribute") NodeTypeString=Node.nodeTypeString;
nodeValue 該節(jié)點的值(如果不含值則為null) AttributeValue =Attribute.nodeValue;
ownerDocument 包含本節(jié)點的文件的根Document 節(jié)點 Document =Node.ownerDocument;
parentNode 該節(jié)點的父節(jié)點(并不適用于Attribute 節(jié)點) ParentElement =Element.parentNode;
previousSibling 與本節(jié)點位于同一層級的先前節(jié)點 PreviousElement =Element.previousSibling;
text 該節(jié)點與其后裔節(jié)點的全部文字內(nèi)容 AllCharacterData =Element.text;
xml 該節(jié)點與其后裔節(jié)點的全部XML 內(nèi)容 XMLContent =Element.xml;
提示
有關屬于不同形態(tài)節(jié)點對象的所有屬性、方法,與事件的詳細敘述,請參閱由MSDN 所提供的信息,網(wǎng)址為 http://msdn.microsoft.com/xml/reference/scriptref/xmldom_Objects.asp 。注意在該網(wǎng)頁中,前置字符串XMLDOM 作為表格9-1 中每個節(jié)點名稱的開端-例如,XMLDOMDocument、XMLDOMElement 與XMLDOMText.(這些是每個節(jié)點形態(tài)的程序接口的名稱。) 也注意共同的節(jié)點屬性和方法被列于XMLDOMNode 的后面。
除了共同的屬性和方法外,每種類型的節(jié)點都提供了附加的屬性和方法,來處理該節(jié)點類型所代表的特殊XML 組件。例如,文件節(jié)點(Document node)提供了parseError 屬性,內(nèi)含任何處理文件時所產(chǎn)生錯誤的相關信息。只有文件節(jié)點擁有這種屬性。在本章稍后,你將看到一份描述某些節(jié)點類型的有用節(jié)點特殊屬性和方法的表格。
提示
如果某個屬性不適用于特定節(jié)點,則該屬性將包含null 值。例如,如果某節(jié)點代表一個不包含任何屬性的XML 文件(如Document 或Comment node)時,其attributes 屬性將被設為null。如果某節(jié)點代表某個不含有任何數(shù)據(jù)類型(只有某些屬性擁有數(shù)據(jù)類型)的XML 組件時,該節(jié)點的dataType 屬性將被設為null。如果節(jié)點并沒有任何非屬性的子節(jié)點,其firstChild 屬性將為null。而如果節(jié)點為不含值的類型(如Document 或Element node),其nodeValue 屬性將被設為null。
注意,表格9-2 中,每個節(jié)點擁有一組屬性,讓你可以瀏覽節(jié)點的階層架構,來從目前節(jié)點存取其它節(jié)點的資料。例如,在列表9-1 中的文件,如變量Document 包含了文件的根Document節(jié)點,后續(xù)的程序代碼將會顯示最接近文件起始部分批注的內(nèi)容,而DOM 會將批注內(nèi)容儲存在Document 節(jié)點的第二個子節(jié)點中。
alert (Document.childNodes(1).nodeValue);
這行程序代碼將會顯示一個消息框,內(nèi)含文字「File Name: In-ventory Dom.xml」。透過XML data island 取得DSO 的XMLDocument 成員對象,來存取根Document 節(jié)點。此Document 節(jié)點被視為存取XML 文件的網(wǎng)關(gateway)。
你使用該節(jié)點來存取其它的節(jié)點。