遍歷裝置通過循環或跨節點樹行駛。
遍歷節點樹
通常要循環的XML文檔,例如:當你想提取每個元素的值。
這就是所謂的"Traversing the node tree"
下面的例子通過<書>的所有子節點循環,並顯示它們的名稱和值:
例
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var x, i ,xmlDoc;
var txt = "";
var text = "<book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book>";
parser = new DOMParser();
xmlDoc
= parser.parseFromString(text,"text/xml");
// documentElement always
represents the root node
x = xmlDoc.documentElement.childNodes;
for (i =
0; i < x.length ;i++) {
txt += x[i].nodeName + ": " +
x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
</script>
</body>
</html>
輸出:
title: Everyday Italian
author: Giada De Laurentiis
year: 2005
試一試» 例子解釋:
- 加載XML字符串載入xmlDoc
- 得到根元素的子節點
- 對於每個子節點,輸出節點名稱和文本節點的節點值
在DOM解析瀏覽器的差異
所有現代瀏覽器都支持W3C DOM規範。
但是,也有瀏覽器之間的一些差異。 一個重要的區別是:
- 他們處理白色空間和新的生產線的方式
DOM - 白色空間和新線路
XML通常包含新行,或空格字符,節點之間。 這通常是當文檔被簡單的編輯器如記事本編輯的情況下。
下面的例子(edited by Notepad)包含CR / LF (new line)每一行,並在每個子節點的前面兩個空間之間:
<book>
<title>Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
Internet Explorer 9的和更早的版本不把空的空白或換行作為文本節點,而其他瀏覽器做的。
下面的例子將輸出孩子的節點數的根元素(of books.xml )了。 IE9和更早版本將輸出4子節點,而IE10及更高版本,和其他瀏覽器將輸出9子節點:
例
function myFunction(xml) {
var xmlDoc = xml.responseXML;
x =
xmlDoc.documentElement.childNodes;
document.getElementById("demo").innerHTML =
"Number
of child nodes: " + x.length;
}
試一試» PCDATA - 解析字符數據
XML解析器通常解析XML文檔中的所有文本。
當XML元素被解析時,XML標籤之間的文本也被解析:
<message>This text is also parsed</message>
解析器這是否因為XML元素可以包含其他元素,如在本實施例中,其中的<name>元素包含其它兩個要素(first and last) :
<name><first>Bill</first><last>Gates</last></name>
分析器將它分解成這樣子元素:
<name>
<first>Bill</first>
<last>Gates</last>
</name>
經過分析的字符數據(PCDATA)是用於關於將由XML解析器解析的文本數據的術語。
CDATA - (Unparsed)字符數據
術語CDATA用於關於不應由XML解析器解析的文本數據。
字符,如"<"和"&"是XML元素是非法的。
"<"會因為解析器解釋為新元素的開始產生錯誤。
"&"會因為解析器將其解釋為一個字符實體的開始產生錯誤。
一些文字,像JavaScript代碼,包含了很多的"<"或"&"字符。 為了避免錯誤的腳本代碼可以被定義為CDATA。
CDATA節內的一切都被解析器忽略。
CDATA項開頭" <![CDATA[ " and ends with " ]]> "
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0)
{
return 1;
} else
{
return 0;
}
}
]]>
</script>
在上面的例子中,CDATA節內的一切都被解析器忽略。
Notes on CDATA sections:
一個CDATA部件不能包含字符串"]]>" 嵌套CDATA部分是不允許的。
該"]]>"的標記CDATA節的結尾不能包含空格或換行符。