XML DOM

DOM(Document Object Model 文檔對象模型)定義了訪問和操作文檔的標準方法。


XML DOM

XML DOM(XML Document Object Model)定義了訪問和操作 XML 文檔的標準方法。

XML DOM 把 XML 文檔作爲樹結構來查看。

所有元素可以通過 DOM 樹來訪問。可以修改或刪除它們的內容,並創建新的元素。元素,它們的文本,以及它們的屬性,都被認爲是節點。

在我們的 XML DOM 教程中,您可以學習更多有關 XML DOM 的知識。


HTML DOM

HTML DOM 定義了訪問和操作 HTML 文檔的標準方法。

所有 HTML 元素可以通過 HTML DOM 來訪問。

在我們的 HTML DOM 教程中,您可以學習更多有關 HTML DOM 的知識。.


加載一個 XML 文件 - 跨瀏覽器實例

下面的實例把 XML 文檔("note.xml")解析到 XML DOM 對象中,然後通過 JavaScript 提取一些信息:

實例

<html>
< body>
< h1>W3Schools Internal Note</h1>
< div>
< b>To:</b> <span id="to"></span><br />
< b>From:</b> <span id="from"></span><br />
< b>Message:</b> <span id="message"></span>
< /div>

< 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","note.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;

document.getElementById("to").innerHTML=
xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
document.getElementById("from").innerHTML=
xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
document.getElementById("message").innerHTML=
xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;
< /script>

< /body>
< /html>

嘗試一下 »


重要註釋!

如需從上面的 XML 文件("note.xml")的 <to> 元素中提取文本 "Tove",語法是:

getElementsByTagName("to")[0].childNodes[0].nodeValue

請注意,即使 XML 文件只包含一個 <to> 元素,您仍然必須指定數組索引 [0]。這是因爲 getElementsByTagName() 方法返回一個數組。


加載一個 XML 字符串 - 跨瀏覽器實例

下面的實例把 XML 字符串解析到 XML DOM 對象中,然後通過 JavaScript 提取一些信息:

實例

<html>
< body>
< h1>W3Schools Internal Note</h1>
< div>
< b>To:</b> <span id="to"></span><br />
< b>From:</b> <span id="from"></span><br />
< b>Message:</b> <span id="message"></span>
< /div>

< script>
txt="<note>";
txt=txt+"<to>Tove</to>";
txt=txt+"<from>Jani</from>";
txt=txt+"<heading>Reminder</heading>";
txt=txt+"<body>Don't forget me this weekend!</body>";
txt=txt+"</note>";

if (window.DOMParser)
{
parser=new DOMParser();
xmlDoc=parser.parseFromString(txt,"text/xml");
}
else // Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXML(txt);
}

document.getElementById("to").innerHTML=
xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
document.getElementById("from").innerHTML=
xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
document.getElementById("message").innerHTML=
xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;
< /script>
< /body>

< /html> 

獲取元素的值

下面的實例中使用的 XML 文件:books.xml

下面的實例檢索第一個 <title> 元素的文本值:

實例

txt=xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;

嘗試一下 »


獲取屬性的值

下面的實例檢索第一個 <title> 元素的 "lang" 屬性的文本值:

實例

txt=xmlDoc.getElementsByTagName("title")[0].getAttribute("lang");

嘗試一下 »


改變元素的值

下面的實例改變第一個 <title> 元素的文本值:

實例

x=xmlDoc.getElementsByTagName("title")[0].childNodes[0];
x.nodeValue="Easy Cooking";

嘗試一下 »


創建新的屬性

XML DOM 的 setAttribute() 方法可用於改變現有的屬性值,或創建一個新的屬性。

下面的實例創建了一個新的屬性(edition="first"),然後把它添加到每一個 <book> 元素中:

實例

x=xmlDoc.getElementsByTagName("book");

for(i=0;i<x.length;i++)
{
x[i].setAttribute("edition","first");
}

嘗試一下 »


創建元素

XML DOM 的 createElement() 方法創建一個新的元素節點。

XML DOM 的 createTextNode() 方法創建一個新的文本節點。

XML DOM 的 appendChild() 方法向節點添加子節點(在最後一個子節點之後)。

如需創建帶有文本內容的新元素,需要同時創建元一個新的元素節點和一個新的文本節點,然後把他追加到現有的節點。

下面的實例創建了一個新的元素(<edition>),帶有如下文本:First,然後把它添加到第一個 <book> 元素:

實例

newel=xmlDoc.createElement("edition");
newtext=xmlDoc.createTextNode("First");
newel.appendChild(newtext);

x=xmlDoc.getElementsByTagName("book");
x[0].appendChild(newel);

嘗試一下 »

實例解釋

  • 創建一個 <edition> 元素
  • 創建值爲 "First" 的文本節點
  • 把這個文本節點追加到新的 <edition> 元素
  • 把 <edition> 元素追加到第一個 <book> 元素

刪除元素

下面的實例刪除第一個 <book> 元素的第一個節點:

實例

x=xmlDoc.getElementsByTagName("book")[0];
x.removeChild(x.childNodes[0]);

嘗試一下 »

註釋:上面實例的結果可能會根據所用的瀏覽器而不同。Firefox 把新行字符當作空的文本節點,而 Internet Explorer 不是這樣。您可以在我們的 XML DOM 教程 中閱讀到更多有關這個問題以及如何避免它的知識。


發佈了10 篇原創文章 · 獲贊 31 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章