XML DOM ノードアクセス

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

以下の例では、XML ファイルを使用しています。 books.xml.

関数 loadXMLDoc()、外部の JavaScript 内に位置しており、XML ファイルの読み込みに使用されます。

ノードリストのインデックス番号を使用してノードにアクセスする
この例では、getElementsByTagname() メソッドを使用して "books.xml" 中的第3つの <title> 要素を取得しています。
length 属性を使用して要素をループする
この例では、length 属性を使用して "books.xml" 中的すべての <title> 要素をループしています。
要素のノードタイプを確認する
この例では、nodeType 属性を使用して "books.xml" 中的根要素のノードタイプを取得しています。
要素ノードをループする
この例では、nodeType 属性を使用して "books.xml" 中的要素ノードを処理しています。
ノードの関係を使用して要素ノードをループする
この例では、nodeType 属性と nextSibling 属性を使用して "books.xml" 中的要素ノードを処理しています。

ノードにアクセスする

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

  1. getElementsByTagName() メソッドを使用して
  2. ノードツリーをループ(巡回)する
  3. ノードの関係を利用してノードツリー中をナビゲートする

getElementsByTagName() メソッド

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

文法

ノード.getElementsByTagName("tagname");

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

x.getElementsByTagName("title");

注意:上記の例はx节点の下の<title>要素のみを返します。XML文書内のすべての<title>要素を返すには、以下を使用します:

xmlDoc.getElementsByTagName("title");

ここでは、xmlDocは文書自体(ドキュメント节点)です。

DOM Node List

getElementsByTagName()メソッドを使用して节点リスト(node list)を返します。节点リストは节点の配列です。

以下のコードは loadXMLDoc()books.xml"载入 xmlDoc中、そして変数xに<title>节点のリストを保存します:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.getElementsByTagName("title");

インデックスを使用してx内の<title>要素にアクセスできます。第3の<title>にアクセスするには、以下のように書けます:

y=x[2];

TIY

注釈:インデックスは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("<br />");
  }

例を説明します:

  1. を使用して loadXMLDoc()books.xml"载入 xmlDoc
  2. すべての<title>要素节点を取得します。
  3. 各<title>要素のテキスト节点の値を出力します。

TIY

Node Type

XML文書の documentElement 属性はルート节点です。

の属性は节点の nodeName 属性は节点の名前です。

の属性は节点の nodeType 属性は节点のタイプです。

本教程の次の節で、节点属性に関するさらに多くの知識を学びます。

TIY

节点を遍历します。

以下のコードはルート节点の子节点を循環し、それが要素节点であることを確認します:

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("<br />");
  } 
}

例を説明します:

  1. 使用することで loadXMLDoc()books.xml" xmlDoc に読み込みます
  2. ルート要素の子节点を取得します。
  3. 各子节点的节点类型を確認します。节点类型が「1」の場合、それは要素节点です。
  4. 要素ノードの場合、そのノードの名前を出力します

TIY

ノードの関係を使用してナビゲートする

以下のコードは、ノードの関係を使用してノードツリー内でナビゲートする方法を示しています:

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 + "<br />");
  }
y=y.nextSibling;
}
  1. 使用することで loadXMLDoc()books.xml" xmlDoc に読み込みます
  2. 最初の「book」要素の子ノードを取得します
  3. 「y」変数を最初の「book」要素の最初の子ノードに設定します
  4. 各子ノードのノードタイプを確認し、ノードタイプが「1」の場合、要素ノードです
  5. 要素ノードの場合、そのノードの名前を出力します
  6. 「y」変数を次の同級ノードに設定し、ループを再び実行します

TIY