XMLDOM-ノードのナビゲート
ノードは、ノード関係を使用してナビゲートできます。
DOMノードのナビゲート
ノード間の関係を介してノードツリー内のノードにアクセスすることは、「ナビゲーションノード」と呼ばれることがよくあります。
XML DOMでは、ノードの関係はノードのプロパティとして定義されます。
- parentNode
- childNodes
- 第一子
- 最後の子
- nextSibling
- previousSibling
次の画像は、ノードツリーの一部とbooks.xml内のノード間の関係を示しています。
DOM-親ノード
すべてのノードには、親ノードが1つだけあります。次のコードは、<book>の親ノードに移動します。
例
function myFunction(xml) {
var xmlDoc = xml.responseXML;
var x = xmlDoc.getElementsByTagName("book")[0];
document.getElementById("demo").innerHTML = x.parentNode.nodeName;
}
説明された例:
- 「books.xml」をxmlDocに ロードします
- 最初の<book>要素を取得します
- 「x」の親ノードのノード名を出力します
空のテキストノードを避ける
Firefoxやその他のブラウザは、空の空白や新しい行をテキストノードとして扱いますが、InternetExplorerは扱いません。
これにより、プロパティ(firstChild、lastChild、nextSibling、previousSibling)を使用するときに問題が発生します。
空のテキストノード(要素ノード間のスペースと改行文字)への移動を回避するために、ノードタイプをチェックする関数を使用します。
function get_nextSibling(n)
{
var y = n.nextSibling;
while (y.nodeType! = 1)
{
y = y.nextSibling;
}
return y;
}
上記の関数を使用すると、プロパティnode .nextSiblingの代わりにget_nextSibling( node )を使用できます。
コードの説明:
要素ノードはタイプ1です。兄弟ノードが要素ノードでない場合、要素ノードが見つかるまで次のノードに移動します。このように、結果はInternetExplorerとFirefoxの両方で同じになります。
最初の子要素を取得する
次のコードは、最初の<book>の最初の要素ノードを表示します。
例
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
myFunction(this);
}
};
xhttp.open("GET",
"books.xml", true);
xhttp.send();
function myFunction(xml) {
var xmlDoc = xml.responseXML;
var x = get_firstChild(xmlDoc.getElementsByTagName("book")[0]);
document.getElementById("demo").innerHTML = x.nodeName;
}
//check if
the first node is an element node
function get_firstChild(n) {
var y = n.firstChild;
while (y.nodeType != 1) {
y = y.nextSibling;
}
return y;
}
</script>
</body>
</html>
出力:
title
説明された例:
- 「books.xml」をxmlDocに ロードします
- 最初の<book>要素ノードでget_firstChild関数を使用して、要素ノードである最初の子ノードを取得します
- 要素ノードである最初の子ノードのノード名を出力します
その他の例
この例では、lastChild()メソッドとカスタム関数を使用して、ノードの最後の子ノードを取得します
この例では、nextSibling()メソッドとカスタム関数を使用して、ノードの次の兄弟ノードを取得します
この例では、previousSibling()メソッドとカスタム関数を使用して、ノードの前の兄弟ノードを取得します