XMLDOMトラバースノードツリー
トラバースとは、ノードツリーをループまたは通過することを意味します。
ノードツリーのトラバース
たとえば、XMLドキュメントをループしたい場合がよくあります。たとえば、各要素の値を抽出する場合です。
これは「ノードツリーのトラバース」と呼ばれます
以下の例は、<book>のすべての子ノードをループし、それらの名前と値を表示します。
例
<!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解析におけるブラウザの違い
最新のブラウザはすべて、W3CDOM仕様をサポートしています。
ただし、ブラウザ間にはいくつかの違いがあります。重要な違いの1つは次のとおりです。
- 空白と新しい行を処理する方法
DOM-空白と新しい行
XMLには、ノード間に改行または空白文字が含まれていることがよくあります。これは、ドキュメントがメモ帳などの単純なエディタで編集されている場合によくあります。
次の例(メモ帳で編集)には、各行と各子ノードの前の2つのスペースの間にCR / LF(改行)が含まれています。
<book>
<title>Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
Internet Explorer 9以前では、空の空白や新しい行はテキストノードとして扱われませんが、他のブラウザでは扱われます。
次の例では、( 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>要素には他の2つの要素(最初と最後)が含まれます。
<name><first>Bill</first><last>Gates</last></name>
パーサーはそれを次のようなサブ要素に分割します。
<name>
<first>Bill</first>
<last>Gates</last>
</name>
解析済み文字データ(PCDATA)は、XMLパーサーによって解析されるテキストデータについて使用される用語です。
CDATA-(未解析)文字データ
CDATAという用語は、XMLパーサーによって解析されるべきではないテキストデータについて使用されます。
「<」や「&」などの文字は、XML要素では無効です。
「<」は、パーサーが新しい要素の開始として解釈するため、エラーを生成します。
「&」は、パーサーが文字エンティティの開始として解釈するため、エラーを生成します。
JavaScriptコードなどの一部のテキストには、多くの「<」または「&」文字が含まれています。エラーを回避するために、スクリプトコードをCDATAとして定義できます。
CDATAセクション内のすべては、パーサーによって無視されます。
CDATAセクションは " <![CDATA [ "で始まり、 " ]]> "で終わります:
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0)
{
return 1;
} else
{
return 0;
}
}
]]>
</script>
上記の例では、CDATAセクション内のすべてがパーサーによって無視されます。
CDATAセクションに関する注記:
CDATAセクションに文字列 "]]>"を含めることはできません。ネストされたCDATAセクションは許可されていません。
CDATAセクションの終わりを示す「]]>」には、スペースや改行を含めることはできません。