本篇文章給大家分享的是有關(guān)XML DOM是什么意思,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
10年積累的做網(wǎng)站、網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)制作后付款的網(wǎng)站建設(shè)流程,更有富縣免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
XML 文檔對(duì)象模型定義訪問(wèn)和操作XML文檔的標(biāo)準(zhǔn)方法。
DOM 將 XML 文檔作為一個(gè)樹(shù)形結(jié)構(gòu),而樹(shù)葉被定義為節(jié)點(diǎn)。
XML DOM 是:
用于 XML 的標(biāo)準(zhǔn)對(duì)象模型
用于 XML 的標(biāo)準(zhǔn)編程接口
中立于平臺(tái)和語(yǔ)言
W3C 的標(biāo)準(zhǔn)
XML DOM 定義了所有 XML 元素的對(duì)象和屬性,以及訪問(wèn)它們的方法(接口)。
換句話說(shuō):
XML DOM 是用于獲取、更改、添加或刪除 XML 元素的標(biāo)準(zhǔn)。
XML DOM 節(jié)點(diǎn)
XML 文檔中的每個(gè)成分都是一個(gè)節(jié)點(diǎn)。
根據(jù) DOM,XML 文檔中的每個(gè)成分都是一個(gè)節(jié)點(diǎn)。
DOM 是這樣規(guī)定的:
整個(gè)文檔是一個(gè)文檔節(jié)點(diǎn)
每個(gè) XML 標(biāo)簽是一個(gè)元素節(jié)點(diǎn)
包含在 XML 元素中的文本是文本節(jié)點(diǎn)
每一個(gè) XML 屬性是一個(gè)屬性節(jié)點(diǎn)
注釋屬于注釋節(jié)點(diǎn)
請(qǐng)看下面的 XML 文件 (books.xml):
Harry Potter J K. Rowling 2005 29.99 Everyday Italian Giada De Laurentiis 2005 30.00 Learning XML Erik T. Ray 2003 39.95 XQuery Kick Start James McGovern Per Bothner Kurt Cagle James Linn Vaidyanathan Nagarajan 2003 49.99
在上面的 XML 中,根節(jié)點(diǎn)是
根節(jié)點(diǎn)
第一個(gè)
在 DOM 處理中一個(gè)普遍的錯(cuò)誤是,認(rèn)為元素節(jié)點(diǎn)包含文本。
不過(guò),元素節(jié)點(diǎn)的文本是存儲(chǔ)在文本節(jié)點(diǎn)中的。
在這個(gè)例子中:
"2005" 不是
XML DOM 節(jié)點(diǎn)樹(shù)
XML DOM 把 XML DOM 文檔視為一棵節(jié)點(diǎn)樹(shù) (node-tree)。
樹(shù)中的所有節(jié)點(diǎn)彼此之間都有關(guān)系。
XML DOM 把 XML 文檔視為一種樹(shù)結(jié)構(gòu)。這種樹(shù)結(jié)構(gòu)被稱為節(jié)點(diǎn)樹(shù)。
可通過(guò)這棵樹(shù)訪問(wèn)所有節(jié)點(diǎn)??梢孕薷幕騽h除它們的內(nèi)容,也可以創(chuàng)建新的元素。
這顆節(jié)點(diǎn)樹(shù)展示了節(jié)點(diǎn)的集合,以及它們之間的聯(lián)系。這棵樹(shù)從根節(jié)點(diǎn)開(kāi)始,然后在樹(shù)的最低層級(jí)向文本節(jié)點(diǎn)長(zhǎng)出枝條:
上面的圖片表示 XML 文件books.xml。
節(jié)點(diǎn)樹(shù)中的節(jié)點(diǎn)彼此之間都有等級(jí)關(guān)系。
父、子和同級(jí)節(jié)點(diǎn)用于描述這種關(guān)系。父節(jié)點(diǎn)擁有子節(jié)點(diǎn),位于相同層級(jí)上的子節(jié)點(diǎn)稱為同級(jí)節(jié)點(diǎn)(兄弟或姐妹)。
在節(jié)點(diǎn)樹(shù)中,頂端的節(jié)點(diǎn)成為根節(jié)點(diǎn)
根節(jié)點(diǎn)之外的每個(gè)節(jié)點(diǎn)都有一個(gè)父節(jié)點(diǎn)
節(jié)點(diǎn)可以有任何數(shù)量的子節(jié)點(diǎn)
葉子是沒(méi)有子節(jié)點(diǎn)的節(jié)點(diǎn)
同級(jí)節(jié)點(diǎn)是擁有相同父節(jié)點(diǎn)的節(jié)點(diǎn)
下面的圖片展示出節(jié)點(diǎn)樹(shù)的一個(gè)部分,以及節(jié)點(diǎn)間的關(guān)系:
因?yàn)?XML 數(shù)據(jù)是按照樹(shù)的形式進(jìn)行構(gòu)造的,所以可以在不了解樹(shù)的確切結(jié)構(gòu)且不了解其中包含的數(shù)據(jù)類型的情況下,對(duì)其進(jìn)行遍歷。
您將在本教程稍后的章節(jié)學(xué)習(xí)更多有關(guān)遍歷節(jié)點(diǎn)樹(shù)的知識(shí)。
注釋:父節(jié)點(diǎn):Parent Node,子節(jié)點(diǎn):Children Node,同級(jí)節(jié)點(diǎn):Sibling Node。
請(qǐng)看下面的 XML 片段:
Harry Potter J K. Rowling 2005 29.99
在上面的 XML 中,
此外,
解析 XML DOM
所有現(xiàn)代瀏覽器都內(nèi)建了用于讀取和操作 XML 的 XML 解析器。
解析器把 XML 讀入內(nèi)存,并把它轉(zhuǎn)換為可被 JavaScript 訪問(wèn)的 XML DOM 對(duì)象。
微軟的 XML 解析器與其他瀏覽器中的解析器是有差異的。微軟的解析器支持對(duì) XML 文件和 XML 字符串(文本)的加載,而其他瀏覽器使用單獨(dú)的解析器。不過(guò),所有的解析器都含有遍歷 XML 樹(shù)、訪問(wèn)、插入及刪除節(jié)點(diǎn)的函數(shù)。
在本教程中,我們將為您講解如何創(chuàng)建可在 IE 及其他瀏覽器中運(yùn)行的腳本。
微軟的 XML 解析器內(nèi)建于 Internet Explorer 5 及更高版本中。
下面的 JavaScript 片段把 XML 文檔 ("books.xml") 載入了解析器:
xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.load("books.xml");
第一行創(chuàng)建空的微軟 XML 文檔對(duì)象
第二行關(guān)閉異步加載,這樣可確保在文檔完整加載之前,解析器不會(huì)繼續(xù)執(zhí)行腳本
第三行告知解析器加載名為 "books.xml" 的文檔
下面的 JavaScript 片段把名為 txt 的字符串載入解析器中:
xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.loadXML(txt);
注釋:loadXML() 方法用于加載字符串(文本),而load() 用于加載文件。
下面的 JavaScript 片段把 XML 文檔 ("books.xml") 載入了解析器:
xmlDoc=document.implementation.createDocument("","",null); xmlDoc.async="false"; xmlDoc.load("books.xml");
第一行創(chuàng)建空的 XML 文檔對(duì)象
第二行關(guān)閉異步加載,這樣可確保在文檔完整加載之前,解析器不會(huì)繼續(xù)執(zhí)行腳本
第三行告知解析器加載名為 "books.xml" 的文檔
下面的 JavaScript 片段把名為 txt 的字符串載入解析器中:
parser=new DOMParser(); xmlDoc=parser.parseFromString(txt,"text/xml");
第一行創(chuàng)建一個(gè)空的 XML 文檔對(duì)象
第二行告知解析器加載名為 txt 的字符串
注釋:Internet Explorer 使用loadXML() 方法來(lái)解析 XML 字符串,而其他瀏覽器使用 DOMParser 對(duì)象。
下面的例子把 XML 文檔 ("books.xml") 載入 XML 解析器:
出于安全方面的原因,現(xiàn)代的瀏覽器不允許跨域的訪問(wèn)。
這意味著,網(wǎng)頁(yè)以及它試圖加載的 XML 文件,都必須位于相同的服務(wù)器上。
W3School 的實(shí)例所打開(kāi)的 XML 文件位于 W3School 的域上。
假如你打算在自己的網(wǎng)頁(yè)上使用上面的例子,則必須把 XML 文件放到自己的服務(wù)器上。否則,xmlDoc.load() 將產(chǎn)生錯(cuò)誤 "Access is denied"。
下面的代碼加載并解析了一個(gè) XML 字符串:
XML DOM 加載函數(shù)
XML DOM 含有遍歷 XML 樹(shù)以及訪問(wèn)、插入、刪除節(jié)點(diǎn)的方法(函數(shù))。
然后,在訪問(wèn)并處理 XML 文檔之前,必須把它載入 XML DOM 對(duì)象。
上一節(jié)演示了如何加載 XML 文檔。為了避免因加載文檔而重復(fù)編寫(xiě)代碼,可以把代碼存儲(chǔ)在一個(gè)單獨(dú)的 JavaScript 文件中:
function loadXMLDoc(dname) { try //Internet Explorer { xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); } catch(e) { try //Firefox, Mozilla, Opera, etc. { xmlDoc=document.implementation.createDocument("","",null); } catch(e) {alert(e.message)} } try { xmlDoc.async=false; xmlDoc.load(dname); return(xmlDoc); } catch(e) {alert(e.message)} return(null); }
上面的函數(shù)存儲(chǔ)在名為 "loadxmldoc.js" 的文件中。
下面的例子在其
部分有一個(gè)指向 "loadxmldoc.js" 的鏈接,并使用 loadXMLDoc() 函數(shù)加載 XML 文檔 ("books.xml"):XML DOM - 屬性和方法
DOM 把 XML 模擬為一系列節(jié)點(diǎn)接口??赏ㄟ^(guò) JavaScript 或其他編程語(yǔ)言來(lái)訪問(wèn)節(jié)點(diǎn)。在本教程中,我們使用 JavaScript。
對(duì) DOM 的編程接口是通過(guò)一套標(biāo)準(zhǔn)的屬性和方法來(lái)定義的。
屬性經(jīng)常按照“某事物是什么”的方式來(lái)使用(例如節(jié)點(diǎn)名是 "book")。
方法經(jīng)常按照“對(duì)某事物做什么”的方式來(lái)使用(例如刪除 "book" 節(jié)點(diǎn))。
一些典型的 DOM 屬性:
x.nodeName - x 的名稱
x.nodeValue - x 的值
x.parentNode - x 的父節(jié)點(diǎn)
x.childNodes - x 的子節(jié)點(diǎn)
x.attributes - x 的屬性節(jié)點(diǎn)
注釋:在上面的列表中,x 是一個(gè)節(jié)點(diǎn)對(duì)象。
x.getElementsByTagName(name) - 獲取帶有指定標(biāo)簽名稱的所有元素
x.appendChild(node) - 向 x 插入子節(jié)點(diǎn)
x.removeChild(node) - 從 x 刪除子節(jié)點(diǎn)
注釋:在上面的列表中,x 是一個(gè)節(jié)點(diǎn)對(duì)象。
從 books.xml 中的
txt=xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue
在此語(yǔ)句執(zhí)行后,txt 保存的值是 "Everyday Italian"。
xmlDoc - 由解析器創(chuàng)建的 XML DOM
getElementsByTagName("title")[0] - 第一個(gè)
childNodes[0] -
nodeValue - 節(jié)點(diǎn)的值 (文本自身)
在上面的例子中,getElementsByTagName 是方法,而 childNodes 和 nodeValue 是屬性。
下面的代碼片段使用 loadXMLDoc 函數(shù)把books.xml 載入 XML 解析器中,并顯示第一個(gè) book 的數(shù)據(jù):
xmlDoc=loadXMLDoc("books.xml"); document.write(xmlDoc.getElementsByTagName("title") [0].childNodes[0].nodeValue); document.write("
"); document.write(xmlDoc.getElementsByTagName("author") [0].childNodes[0].nodeValue); document.write("
"); document.write(xmlDoc.getElementsByTagName("year") [0].childNodes[0].nodeValue);
輸出:
Harry Potter J K. Rowling 2005
在上面的例子中,我們?yōu)槊總€(gè)文本節(jié)點(diǎn)使用 childNodes[0],即使每個(gè)元素只有一個(gè)文本節(jié)點(diǎn)。這是由于 getElementsByTagName() 方法總是會(huì)返回?cái)?shù)組。
下面的代碼加載并解析一個(gè) XML 字符串:
下面的代碼片段使用 loadXMLString 函數(shù)把books.xml 載入 XML 解析器,并顯示第一個(gè) book 的數(shù)據(jù):
text="" text=text+" "; xmlDoc=loadXMLString(text); document.write(xmlDoc.getElementsByTagName("title") [0].childNodes[0].nodeValue); document.write(""; text=text+" "; text=text+"Harry Potter "; text=text+"J K. Rowling "; text=text+"2005 "; text=text+"
"); document.write(xmlDoc.getElementsByTagName("author") [0].childNodes[0].nodeValue); document.write("
"); document.write(xmlDoc.getElementsByTagName("year") [0].childNodes[0].nodeValue);
輸出:
Harry Potter J K. Rowling 2005
您可以通過(guò)三種方法來(lái)訪問(wèn)節(jié)點(diǎn):
通過(guò)使用 getElementsByTagName() 方法
通過(guò)循環(huán)(遍歷)節(jié)點(diǎn)樹(shù)
通過(guò)利用節(jié)點(diǎn)的關(guān)系在節(jié)點(diǎn)樹(shù)中導(dǎo)航
getElementsByTagName() 返回?fù)碛兄付?biāo)簽名的所有元素。
node.getElementsByTagName("tagname");
下面的例子返回 x 元素下的所有
x.getElementsByTagName("title");
請(qǐng)注意,上面的例子僅返回 x 節(jié)點(diǎn)下的
xmlDoc.getElementsByTagName("title");
在這里,xmlDoc 就是文檔本身(文檔節(jié)點(diǎn))。
getElementsByTagName() 方法返回節(jié)點(diǎn)列表 (node list)。節(jié)點(diǎn)列表是節(jié)點(diǎn)的數(shù)組。
下面的代碼通過(guò)使用loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中,然后在變量 x 中存儲(chǔ)
xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.getElementsByTagName("title");
可通過(guò)下標(biāo)訪問(wèn) x 中的
y=x[2];
注釋:下標(biāo)以 0 起始。
在本教程中稍后的章節(jié),您將學(xué)到更多有關(guān) Node List 的知識(shí)。
length 屬性定義節(jié)點(diǎn)列表的長(zhǎng)度(即節(jié)點(diǎn)的數(shù)目)。
您能夠通過(guò)使用 length 屬性來(lái)循環(huán)一個(gè)節(jié)點(diǎn)列表:
xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.getElementsByTagName("title"); for (i=0;i"); }
使用loadXMLDoc() 把 "books.xml" 載入 xmlDoc
取得所有
輸出每個(gè)
XML 文檔的 documentElement 屬性是根節(jié)點(diǎn)。
節(jié)點(diǎn)的 nodeName 屬性是節(jié)點(diǎn)的名稱。
節(jié)點(diǎn)的 nodeType 屬性是節(jié)點(diǎn)的類型。
您將在本教程的下一節(jié)中學(xué)習(xí)更多有關(guān)節(jié)點(diǎn)屬性的知識(shí)。
下面的代碼循環(huán)根節(jié)點(diǎn)的子節(jié)點(diǎn),同時(shí)也是元素節(jié)點(diǎn):
xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.documentElement.childNodes; for (i=0;i"); } }
通過(guò)使用loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中
獲得根元素的子節(jié)點(diǎn)
檢查每個(gè)子節(jié)點(diǎn)的節(jié)點(diǎn)類型。如果節(jié)點(diǎn)類型是 "1",則是元素節(jié)點(diǎn)
如果是元素節(jié)點(diǎn),則輸出節(jié)點(diǎn)的名稱
下面的代碼通過(guò)利用節(jié)點(diǎn)的關(guān)系在節(jié)點(diǎn)樹(shù)中進(jìn)行導(dǎo)航:
xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.getElementsByTagName("book")[0].childNodes; y=xmlDoc.getElementsByTagName("book")[0].firstChild; for (i=0;i"); } y=y.nextSibling; }
通過(guò)使用loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中
獲得第一個(gè) book 元素的子節(jié)點(diǎn)
把 "y" 變量設(shè)置為第一個(gè) book 元素的第一個(gè)子節(jié)點(diǎn)
檢查每個(gè)子節(jié)點(diǎn)的節(jié)點(diǎn)類型,如果節(jié)點(diǎn)類型是 "1",則是元素節(jié)點(diǎn)
如果是元素節(jié)點(diǎn),則輸出該節(jié)點(diǎn)的名稱
把 "y" 變量設(shè)置為下一個(gè)同級(jí)節(jié)點(diǎn),并再次運(yùn)行循環(huán)
在 XML 文檔對(duì)象模型 (DOM) 中,每個(gè)節(jié)點(diǎn)都是一個(gè)對(duì)象。
對(duì)象擁有方法(功能)和屬性(關(guān)于對(duì)象的信息),并可通過(guò) JavaScript 進(jìn)行訪問(wèn)和操作。
三個(gè)重要的 XML DOM 節(jié)點(diǎn)屬性是:
nodeName
nodeValue
nodeType
nodeName 屬性規(guī)定節(jié)點(diǎn)的名稱。
nodeName 是只讀的
元素節(jié)點(diǎn)的 nodeName 與標(biāo)簽名相同
屬性節(jié)點(diǎn)的 nodeName 是屬性的名稱
文本節(jié)點(diǎn)的 nodeName 永遠(yuǎn)是 #text
文檔節(jié)點(diǎn)的 nodeName 永遠(yuǎn)是 #document
nodeValue 屬性規(guī)定節(jié)點(diǎn)的值。
元素節(jié)點(diǎn)的 nodeValue 是 undefined
文本節(jié)點(diǎn)的 nodeValue 是文本自身
屬性節(jié)點(diǎn)的 nodeValue 是屬性的值
下面的代碼檢索第一個(gè)
xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.getElementsByTagName("title")[0].childNodes[0]; txt=x.nodeValue;
結(jié)果:txt = "Everyday Italian"
通過(guò)使用 loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中
獲取第一個(gè)
把 txt 變量設(shè)置為文本節(jié)點(diǎn)的值
下面的代碼更改第一個(gè)
xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.getElementsByTagName("title")[0].childNodes[0]; x.nodeValue="Easy Cooking";
通過(guò)使用 loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中
獲取第一個(gè)
把文本節(jié)點(diǎn)的值更改為 "Easy Cooking"
nodeType 屬性規(guī)定節(jié)點(diǎn)的類型。
nodeType 是只讀的。
元素類型 | 節(jié)點(diǎn)類型 |
---|---|
元素 | 1 |
屬性 | 2 |
文本 | 3 |
注釋 | 8 |
文檔 | 9 |
當(dāng)使用諸如 childNodes 或 getElementsByTagName() 屬性或方法時(shí),會(huì)返回 NodeList 對(duì)象。
NodeList 對(duì)象表示節(jié)點(diǎn)的列表,以 XML 中的相同順序。
使用從 0 開(kāi)始的下標(biāo)來(lái)訪問(wèn)節(jié)點(diǎn)列表中的節(jié)點(diǎn)。
下面的圖像表示 "books.xml" 中
下面的代碼片段通過(guò)使用loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中,并返回 "books.xml" 中 title 元素的一個(gè)節(jié)點(diǎn)列表:
xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.getElementsByTagName("title");
以上語(yǔ)句執(zhí)行之后,x 成為一個(gè) NodeList 對(duì)象。
下面的代碼片段從節(jié)點(diǎn)列表 x 中的第一個(gè)
txt=x[0].childNodes[0].nodeValue;
在以上語(yǔ)句執(zhí)行之后,txt = "Everyday Italian"。
NodeList 對(duì)象會(huì)保持自身的更新。如果刪除或添加了元素,列表會(huì)自動(dòng)更新。
節(jié)點(diǎn)列表的 length 屬性是列表中節(jié)點(diǎn)的數(shù)量。
下面的代碼片段通過(guò)使用loadXMLDoc() 把 "books.xml" 載入 xmlDoc,并返回 "books.xml" 中
xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.getElementsByTagName('title').length;
在上面的語(yǔ)句執(zhí)行之后,x = 4。
節(jié)點(diǎn)列表的長(zhǎng)度可用于循環(huán)列表中所有的元素。
下面的代碼片段使用 length 屬性來(lái)遍歷
xmlDoc=loadXMLDoc("books.xml"); //the x variable will hold a node list x=xmlDoc.getElementsByTagName('title'); for (i=0;i"); }
輸出:
Harry Potter Everyday Italian XQuery Kick Start Learning XML
通過(guò)使用loadXMLDoc() 把 "books.xml" 載入 xmlDoc
設(shè)置保存所有 title 元素的節(jié)點(diǎn)列表的 x 變量
從所有
元素節(jié)點(diǎn)的 attributes 屬性返回屬性節(jié)點(diǎn)的列表。
這被稱為 Named Node Map,除了方法和屬性上的一些差別以外,它與節(jié)點(diǎn)列表相似。
屬性列表會(huì)保持自身的更新。如果刪除或添加屬性,這個(gè)列表會(huì)自動(dòng)更新。
下面的代碼片段通過(guò)使用loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中,并從 "books.xml"
中的第一個(gè)
xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.getElementsByTagName('book')[0].attributes;
以上代碼執(zhí)行之后,x.length 等于屬性的數(shù)量,可使用 x.getNamedItem() 返回屬性節(jié)點(diǎn)。
下面的代碼片段一個(gè) book 的 "category" 屬性的值,以及其屬性的數(shù)量:
xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.getElementsByTagName("book")[0].attributes; document.write(x.getNamedItem("category").nodeValue); document.write("
" + x.length);
輸出:
children 1
通過(guò)使用loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中
把 x 變量設(shè)置為第一個(gè)
從 "category" 屬性輸出其值
輸出屬性列表的長(zhǎng)度
遍歷 (Traverse) 意味著在節(jié)點(diǎn)樹(shù)中進(jìn)行循環(huán)或移動(dòng)。
下面的例子使用 XML 文件books.xml。
函數(shù)loadXMLString(),位于外部 JavaScript 中,用于加載 XML 文件。
遍歷一棵節(jié)點(diǎn)樹(shù)
循環(huán)
您經(jīng)常需要循環(huán) XML 文檔,比如:當(dāng)你需要提取每個(gè)元素的值時(shí)。
這個(gè)過(guò)程叫作“遍歷節(jié)點(diǎn)樹(shù)”。
下面的例子循環(huán)
輸出:
title: Harry Potter author: J K. Rowling year: 2005
loadXMLString() 把 XML 字符串載入 xmlDoc 中
獲取根元素的子節(jié)點(diǎn)
輸出每個(gè)子節(jié)點(diǎn)的名稱,以及文本節(jié)點(diǎn)的節(jié)點(diǎn)值
通過(guò)節(jié)點(diǎn)間的關(guān)系訪問(wèn)節(jié)點(diǎn)樹(shù)中的節(jié)點(diǎn),通常稱為定位節(jié)點(diǎn) ("navigating nodes")。
在 XML DOM 中,節(jié)點(diǎn)的關(guān)系被定義為節(jié)點(diǎn)的屬性:
parentNode
childNodes
firstChild
lastChild
nextSibling
previousSibling
下面的圖像展示了books.xml 中節(jié)點(diǎn)樹(shù)的一個(gè)部分,并說(shuō)明了節(jié)點(diǎn)之間的關(guān)系:
所有的節(jié)點(diǎn)都僅有一個(gè)父節(jié)點(diǎn)。下面的代碼定位到
xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.getElementsByTagName("book")[0]; document.write(x.parentNode.nodeName);
通過(guò)使用loadXMLDoc() 把 "books.xml" 載入到 xmlDoc 中
獲取第一個(gè)
輸出 "x" 的父節(jié)點(diǎn)的節(jié)點(diǎn)名
TIY
Firefox,以及其他一些瀏覽器,把空的空白或換行當(dāng)作文本節(jié)點(diǎn),而 IE 不會(huì)這么做。
這會(huì)在使用下列屬性使產(chǎn)生一個(gè)問(wèn)題:firstChild、lastChild、nextSibling、previousSibling。
為了避免定位到空的文本節(jié)點(diǎn)(元素節(jié)點(diǎn)之間的空格和換行符號(hào)),我們使用一個(gè)函數(shù)來(lái)檢查節(jié)點(diǎn)的類型:
function get_nextSibling(n) { y=n.nextSibling; while (y.nodeType!=1) { y=y.nextSibling; } return y; }
有了上面的函數(shù),我們就可以使用 get_nextSibling(node) 來(lái)代替 node.nextSibling 屬性。
元素節(jié)點(diǎn)的類型是 1。如果同級(jí)節(jié)點(diǎn)不是元素節(jié)點(diǎn),就移動(dòng)到下一個(gè)節(jié)點(diǎn),直到找到元素節(jié)點(diǎn)為止。通過(guò)這個(gè)辦法,在 IE 和 Firefox 中,都可以得到相同的結(jié)果。
下面的代碼顯示第一個(gè)
輸出:
title
通過(guò)使用loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中
在第一個(gè)
輸出第一個(gè)子節(jié)點(diǎn)(屬于元素節(jié)點(diǎn))的節(jié)點(diǎn)名
以上就是XML DOM是什么意思,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。