XML DOM - ノードへのアクセス


DOM を使用すると、XML ドキュメント内のすべてのノードにアクセスできます。


实例

試してみる - 例

以下の例では XML ファイルを使用します。
関数loadXMLDoc()、外部 JavaScript 内に配置され、XML ファイルの読み込みに使用されます。


この例では、getElementsByTagname() メソッドを使用して "books.xml" 内の 3 番目の <title> 要素を取得します。


この例では、length 属性を使用して "books.xml" 内のすべての <title> 要素を走査します。


この例では、nodeType 属性を使用して "books.xml" 内のルート要素のノードタイプを取得します。


この例では、nodeType 属性を使用して "books.xml" 内の要素ノードを処理します。


この例では、nodeType 属性と nextSibling 属性を使用して "books.xml" 内の要素ノードを処理します。


ノードへのアクセス

ノードにアクセスするには、次の 3 つの方法があります。

1. getElementsByTagName() メソッドを使用する。

2. ノードツリーをループ(走査)する。

3. ノードの関係を利用してノードツリー内をナビゲートする。


getElementsByTagName() メソッド

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

構文

node.getElementsByTagName("tagname");

例

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

x.getElementsByTagName("title");

上記の例は、x ノード配下の <title> 要素のみを返すことに注意してください。XML ドキュメント内のすべての <title> 要素を返す必要がある場合は、次を使用します:

xmlDoc.getElementsByTagName("title");

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


DOM ノードリスト(Node List)

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

以下のコードは、次を使用しますloadXMLDoc()"" を xmlDoc に読み込み、変数 x に <title> ノードのリストを格納します:

xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.getElementsByTagName("title");

インデックス番号を使用して x 内の <title> 要素にアクセスできます。3 番目の <title> にアクセスするには、次のように記述します:

y=x[2];

注意:このインデックスは 0 から始まります。

このチュートリアルの後の章では、ノードリスト(Node List)について詳しく学びます。


DOM ノードリストの長さ(Node List Length)

length 属性はノードリストの長さ(つまりノードの数)を定義します。

length 属性を使用してノードリストを走査できます:

例

xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.getElementsByTagName("title"); for (i=0;i<x.length;i++) { document.write(x[i].childNodes[0].nodeValue); document.write(""); }

試してみる »

例の説明:

  1. 使用してloadXMLDoc()"" を xmlDoc に読み込みます
  2. すべての <title> 要素ノードを取得します
  3. 各 <title> 要素のテキストノードの値を出力します

ノードタイプ(Node Types)

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

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

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

このチュートリアルの次の章では、ノードの属性について詳しく学びます。


ノードの走査

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

例

xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.documentElement.childNodes; for (i=0;i<x.length;i++) { if (x[i].nodeType==1) { //一度実行 document.write(x[i].nodeName); document.write(""); } }

試してみる »

例の説明:

  1. 使用してloadXMLDoc()"" を xmlDoc に読み込みます
  2. ルート要素の子ノードを取得します
  3. 各子ノードのノードタイプを確認します。ノードタイプが "1" の場合は、要素ノードです。
  4. 要素ノードの場合は、ノードの名前を出力します

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

以下のコードは、ノードの関係を使用してノードツリーをナビゲートします:

例

xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.getElementsByTagName("book")[0].childNodes; y=xmlDoc.getElementsByTagName("book")[0].firstChild; for (i=0;i<x.length;i++) { if (y.nodeType==1) { //ノード名を出力 document.write(y.nodeName + ""); } y=y.nextSibling; }

試してみる »
  1. 使用してloadXMLDoc()"" を xmlDoc に読み込みます
  2. 最初の book 要素の子ノードを取得します
  3. "y" 変数を最初の book 要素の最初の子ノードに設定します
  4. 各子ノード(最初の子ノードは "y" から始まります)について、ノードタイプを確認し、ノードタイプが "1" の場合は要素ノードです。
  5. 要素ノードの場合は、そのノードの名前を出力します
  6. "y" 変数を次の兄弟ノードに設定し、ループを再度実行します

その他の拡張