最新のWeb開発のチュートリアル
 

XML DOMトラバースノードツリー


手段をループまたはノードツリー上を移動を横断します。


ノードツリーのトラバース

多くの場合、あなたは、たとえば、ループに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
»それを自分で試してみてください

例を説明しました:

  1. XMLDOCにXML文字列をロードします
  2. ルート要素の子ノードを取得します。
  3. 各子ノード、出力ノード名と、テキストノードのノード値の

DOM解析におけるブラウザの違い

すべての近代的なブラウザでは、W3C DOMの仕様をサポートしています。

しかし、ブラウザの間にいくつかの違いがあります。 1つの重要な違いは、次のとおりです。

  • 彼らはホワイトスペースや改行を処理する方法

DOM - ホワイトスペースと改行

XMLは、多くの場合、ノード間で、新しい行、または空白文字が含まれています。 これは多くの場合、文書はメモ帳などの単純なエディタで編集された場合です。

次の例(edited by Notepad) CR / LF含まれている(new line)各行と各子ノードの前に2つの空間の間を:

<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>要素は、2つの他の要素が含まれています(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セクションの終わりを示しています。