XML DOM ノードのアクセス

DOM を通じて、XML ドキュメント内の各ノードにアクセスできます。

ノードのアクセス

ノードにアクセスする方法は以下の3種類があります:

  • getElementsByTagName() メソッドを使用して
  • ノードツリーをループ(巡回)して
  • ノードの関係を利用してノードツリーをナビゲート

getElementsByTagName() メソッド

getElementsByTagName() 指定されたタグ名を持つすべての要素を返します。

文法

node.getElementsByTagName("tagname");

以下の例では、x ノードの下のすべての <title> 要素を返します:

x.getElementsByTagName("title");

注意してください、上記の例は x ノードの下の <title> 要素のみを返します。XML ドキュメント内のすべての <title> 要素を返すには、以下を使用してください:

xmlDoc.getElementsByTagName("title");

ここでは、xmlDoc これはドキュメント自体(ドキュメントノード)です。

DOM ノードリスト

getElementsByTagName() 方法返回节点列表(node list)。节点列表是节点的数组。

メソッドはノードリスト(ノードリスト)を返します。ノードリストはノードの配列です。

x = xmlDoc.getElementsByTagName("title");

x[2]をインデックスでアクセスできます。x[3]にアクセスするには、以下のように書きます:

y = x[2];注:

自分で試してみてください

インデックスは0から始まります。

length DOMノードリストの長さ

属性を使用してノードリストの長さ(ノード数)を定義できます。 length 属性を使用してノードリストをループで巡回します:

var x = xmlDoc.getElementsByTagName("title");
for (i = 0; i < x.length; i++) {
  // ここに各ノードを処理するコードを書きます
  }

自分で試してみてください

ノードタイプ

XMLドキュメントの documentElement 属性はルートノードです。

ノードの nodeName 属性はノードの名前です。

ノードの nodeType 属性はノードのタイプです。

次の章でノード属性に関するより多くの内容を学びます。

自分で試してみてください

ノードの巡回

以下のコードはルートノードの子ノード(要素ノードでもあります)をループで巡回します:

txt = "";
x = xmlDoc.documentElement.childNodes;
for (i = 0; i < x.length; i++) {
  // 元素ノード(タイプ 1)のみを処理
  if (x[i].nodeType == 1) {
    txt += x[i].nodeName + "<br>";
  }
}

自分で試してみてください

例説明:

  1. 「」を既にロードしていると仮定しますbooks.xml「」に xmlDoc
  2. 根要素(xmlDoc)の子ノードを取得します
  3. 各子ノードのノードタイプを確認します。ノードタイプが"1「」は要素ノードです
  4. 要素ノードの場合、ノード名を出力します

ノード関係のナビゲーション

以下のコードはノードの関係を利用してノードツリー内でナビゲーションを行います:

x = xmlDoc.getElementsByTagName("book")[0];
xlen = x.childNodes.length;
y = x.firstChild;
txt = "";
for (i = 0; i < xlen; i++) {
  // 元素ノード(タイプ 1)のみを処理
  if (y.nodeType == 1) {
    txt += y.nodeName + "<br>";
  }
  y = y.nextSibling;
}

自分で試してみてください

例説明:

  1. 「」を既にロードしていると仮定しますbooks.xml「」に xmlDoc
  2. 最初の book 要素の子要素を取得します
  3. "変数を最初の book 要素の最初の子ノードに設定します
  4. 各子ノード(最初の子ノード"y"で始まる場合():
  5. 各子ノードのノードタイプを確認します。ノードタイプが"1"の場合、それは要素ノードです
  6. 要素ノードの場合、そのノードの名前を出力します
  7. "を設定しますy"変数を次の同級ノードに設定し、再度ループを実行します