XML技術手冊登入
XML技術手冊
作者:php.cn  更新時間:2022-04-14 15:57:53

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 教學 中閱讀更多關於這個問題以及如何避免它的知識。 ##########

PHP中文網