XML DOM ノードリスト

getElementsByTagName() メソッドと childNodes 属性がノードのリストを返します。

DOM ノードリスト

次のように使用すると、 childNodes または getElementsByTagName() 属性やメソッドを使用すると、NodeList オブジェクトが返されます。

NodeList オブジェクトは、XML内の順序と同じ順序でノードのリストを表します。

ノードリストのノードは、0から始まるインデックス番号でアクセスできます。

以下の図は示しています books.xml 中 <title> 要素のノードリスト:

DOM ノードリスト

「books.xml」が変数 xmlDoc に読み込まれていると仮定します。

このコードスライスは「books.xml」内の title 要素のノードリストを返します:

x = xmlDoc.getElementsByTagName("title");

上記の文を実行した後、x は NodeList オブジェクトになります。

以下のコードスニペットは、ノードリスト(x)内の最初の<title>要素のテキストを返します:

var txt = x[0].childNodes[0].nodeValue;

自分で試してみる

上記の文を実行すると、txt = "雅舍谈吃"になります。

ノードリストの長さ

NodeListオブジェクトは自身の更新を保持します。要素を削除したり追加したりすると、リストが自動的に更新されます。

ノードリストの length 属性はリスト内のノードの数です。

このコードは"books.xml"内の<title>要素の数を返します:

x = xmlDoc.getElementsByTagName('title').length;

上記の文を実行すると、x の値が5です。

ノードリストの長さは、リスト内のすべての要素をループで巡回するために使用できます。

このコードは以下を使用して length 属性ループを使用して<title>要素リストを巡回します:

x = xmlDoc.getElementsByTagName('title');
xLen = x.length;
for (i = 0; i <xLen; i++) {
    txt += x[i].childNodes[0].nodeValue) + " ";
}

自分で試してみる

例解:

  1. 仮定 books.xml 読み込まれました xmlDoc
  2. x変数を設定して、すべてのtitle要素のノードリストを保存します
  3. <title>要素からテキストノードの値を取得します

DOM属性リスト(ネームドノードマップ)

要素ノードの attributes 属性は属性ノードのリストを返します。

これはネームドノードマップ(named node map)と呼ばれ、ノードリストに似ていますが、メソッドや属性が異なります。

属性リストも常に最新の状態を保ちます。属性を削除したり追加したりすると、リストが自動的に更新されます。

このコードは、"books.xml"の最初の<book>要素から属性ノードリストを返します:

x = xmlDoc.getElementsByTagName('book')[0].attributes;

上記のコードを実行すると、x.length 属性の数に等しく、以下を使用できます x.getNamedItem() 属性ノードを返します。

このコードは、最初の本の"category"属性の値と属性の数を取得します:

x = xmlDoc.getElementsByTagName("book")[0].attributes;
txt = x.getNamedItem("category").nodeValue + " " + x.length;

自分で試してみる

例解:

  1. 仮定 books.xml 読み込まれた xmlDoc
  2. 最初の <book> 要素のすべての属性のリストを保存するために x 変数を設定する
  3. "category" 属性の値および属性リストの長さを取得する