XML DOM 高階
XML DOM - 高級
在本教學的較早章節中,我們介紹了XML DOM,並使用了XML DOM 的getElementsByTagName() 方法從XML 文檔中取回數據。
在本章中我們將結合一些其他重要的 XML DOM 方法。
您可以在我們的 XML DOM 教學 中學習更多有關 XML DOM 的知識。
取得元素的值
下面的實例中使用的 XML 檔案:books.xml。
下面的實例檢索第一個<title> 元素的文字值:
實例
##<!DOCTYPE html> <html> <body> <script> if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("GET","books.xml",false); xmlhttp.send(); xmlDoc=xmlhttp.responseXML; txt=xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue; document.write(txt); </script> </body> </html>
運行實例»點擊"運行實例" 按鈕查看線上實例
#取得屬性的值下面的實例檢索第一個<title> 元素的"lang" 屬性的文字值:
<!DOCTYPE html> <html> <body> <script> if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("GET","books.xml",false); xmlhttp.send(); xmlDoc=xmlhttp.responseXML; txt=xmlDoc.getElementsByTagName("title")[0].getAttribute("lang"); document.write(txt); </script> </body> </html>
執行實例» 點擊"運行實例" 按鈕查看線上實例
改變元素的值下面的實例改變第一個<title> 元素的文字值:
實例
#執行實例»點擊"運行實例"按鈕查看線上實例
<!DOCTYPE html> <html> <body> <script> if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("GET","books.xml",false); xmlhttp.send(); xmlDoc=xmlhttp.responseXML; x=xmlDoc.getElementsByTagName("title")[0].childNodes[0]; x.nodeValue="Easy Cooking"; x=xmlDoc.getElementsByTagName("title")[0].childNodes[0]; txt=x.nodeValue; document.write(txt); </script> </body> </html>
#執行實例»點擊"運行實例"按鈕查看線上實例
建立新的屬性XML DOM 的setAttribute() 方法可用來改變現有的屬性值,或建立一個新的屬性。 下面的實例建立了一個新的屬性(edition="first"),然後把它加入每一個<book> 元素中:
##實例
運行實例»
點擊"運行實例"按鈕查看線上實例
創建元素<!DOCTYPE html>
<html>
<body>
<script>
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","books.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
x=xmlDoc.getElementsByTagName("book");
for(i=0;i<x.length;i++)
{
x[i].setAttribute("edition","first");
}
//Output all attribute values
for (i=0;i<x.length;i++)
{
document.write("Category: " + x[i].getAttribute('category') + "<br>");
document.write("Edition: " + x[i].getAttribute('edition') + "<br>");
}
</script>
</body>
</html>
運行實例»點擊"運行實例"按鈕查看線上實例
XML DOM 的createElement() 方法建立一個新的元素節點。
XML DOM 的 createTextNode() 方法建立一個新的文字節點。
XML DOM 的 appendChild() 方法將子節點新增至節點(在最後一個子節點之後)。
如需建立帶有文字內容的新元素,需要同時建立元一個新的元素節點和一個新的文字節點,然後把他追加到現有的節點。
下面的實例創建了一個新的元素(<edition>),帶有以下文字:First,然後把它加到第一個<book> 元素:
#實例
運行實例»
<!DOCTYPE html>
<html>
<body>
<script>
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","books.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
newel=xmlDoc.createElement("edition");
newtext=xmlDoc.createTextNode("First");
newel.appendChild(newtext);
x=xmlDoc.getElementsByTagName("book");
x[0].appendChild(newel);
for (i=0;i<x[0].childNodes.length;i++)
{
if (x[0].childNodes[i].nodeType==1)
{
document.write(x[0].childNodes[i].nodeName);
document.write(": ");
document.write(x[0].childNodes[i].childNodes[0].nodeValue);
document.write("<br>");
}
}
</script>
</body>
</html>
運行實例»
點擊"運行實例"按鈕查看線上實例
實例解釋
建立一個<edition> 元素
#建立一個值為"First" 的文字節點
把這個文字節點追加到新的<edition> 元素
把<edition> 元素追加到第一個<book> 元素
<!DOCTYPE html> <html> <body> <script> if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("GET","books.xml",false); xmlhttp.send(); xmlDoc=xmlhttp.responseXML; var x=xmlDoc.getElementsByTagName("book")[0]; document.write("Child nodes before removal: "); document.write(x.childNodes.length); x.removeChild(x.childNodes[0]); document.write("<br>Child nodes after removal: "); document.write(x.childNodes.length); </script> </body> </html>##########運行實例»######點擊"運行實例" 按鈕查看在線實例############註解:###上面實例的結果可能會根據所使用的瀏覽器而有所不同。 Firefox 把新行字元當作空的文字節點,而 Internet Explorer 不是這樣。您可以在我們的 XML DOM 教學 中閱讀更多關於這個問題以及如何避免它的知識。 ##########