XML DOM 高級
XML DOM (Document Object Model) 定義了訪問和操作 XML 文檔的標(biāo)準(zhǔn)方法。
XML DOM
DOM 把 XML 文檔視為一種樹結(jié)構(gòu)。通過這個 DOM 樹,可以訪問所有的元素?梢孕薷乃鼈兊膬(nèi)容(文本以及屬性),而且可以創(chuàng)建新的元素。元素,以及它們的文本和屬性,均被視為節(jié)點。
在本教程的較早章節(jié)中,我們介紹了 XML DOM,并使用了 XML DOM 的 getElementsByTagName() 從 DOM 樹中取回數(shù)據(jù)。
在本節(jié)中,我們將講解一些其他較常用的 XML DOM 方法。在本例中,我們使用 XML 文件 books.xml,并使用一個 JavaScript 函數(shù)把 XML 文件加載到名為 xmlDoc 的 DOM 對象中。
如需學(xué)習(xí)更多有關(guān) XML DOM 的知識,請訪問我們的 XML DOM 教程。
獲取元素的值
下面的代碼檢索第一個 <title> 元素的文本值:
x=xmlDoc.getElementsByTagName("title")[0].childNodes[0]; txt=x.nodeValue;
結(jié)果:txt = "Harry Potter"
獲取屬性的值
下面的代碼檢索第一個 <title> 元素的 "lang" 屬性的文本值:
txt=xmlDoc.getElementsByTagName("title")[0].getAttribute("lang");
結(jié)果:txt = "en"
改變元素的值
下面的代碼改變第一個 <title> 元素的文本值:
x=xmlDoc.getElementsByTagName("title")[0].childNodes[0]; x.nodeValue="Easy Cooking";
改變屬性的值
setAttribute() 方法可用于改變已有屬性的值,或創(chuàng)建一個新屬性。
下面的代碼向每個 <book> 元素添加了名為 "edition" 的新屬性(值是 "first"):
x=xmlDoc.getElementsByTagName("book"); for(i=0;i<x.length;i++) { x[i].setAttribute("edition","first"); }
創(chuàng)建元素
createElement() 方法創(chuàng)建新的元素節(jié)點。
createTextNode() 方法創(chuàng)建新的文本節(jié)點。
appendChild() 方法向節(jié)點添加子節(jié)點(在最后一個子節(jié)點之后)。
如需創(chuàng)建帶有文本內(nèi)容的新元素,需要同時創(chuàng)建元素節(jié)點和文本節(jié)點。
下面的代碼創(chuàng)建了一個元素 (<edition>),然后把它添加到第一個 <book> 元素中:
newel=xmlDoc.createElement("edition"); newtext=xmlDoc.createTextNode("First"); newel.appendChild(newtext); x=xmlDoc.getElementsByTagName("book"); x[0].appendChild(newel);
例子解釋:
- 創(chuàng)建 <edition> 元素
- 創(chuàng)建值為 "First" 的文本節(jié)點
- 把這個文本節(jié)點追加到 <edition> 元素
- 把 <edition> 元素追加到第一個 <book> 元素
刪除元素
removeChild() 方法刪除指定的節(jié)點(或元素)。
下面的代碼片段將刪除第一個 <book> 元素中的第一個節(jié)點:
x=xmlDoc.getElementsByTagName("book")[0]; x.removeChild(x.childNodes[0]);
注釋:上例的結(jié)果可能會根據(jù)所用的瀏覽器而不同。Firefox 把新行字符當(dāng)作空的文本節(jié)點,而 Internet Explorer 不是這樣。您可以在 w3school 的 XML DOM 教程中閱讀到更多有關(guān)這個問題以及如何避免它的知識。
這里提供的 XML DOM 實例,只向您展示了少數(shù)幾項我們可以利用 XML DOM 完成的工作。
如需學(xué)習(xí)更多有關(guān) XML DOM 的知識,請訪問 w3school 的 XML DOM 教程。