ホーム HTML CSS XML JAVASCRIPT   PHP SQL MORE...   リファレンス 事例集    

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

« 前章へ 次章へ »

DOMにより、XML文書のすべてのノードにアクセスできます。


Examples

試してください - 例

次の例では、XMLファイルbooks.xmlを使用します。
外部JavaScrip関数 loadXMLDoc() は、XMLファイルのロードに使用します。

インデックス番号を用いてノードリスト内のノードにアクセス
この例は、"books.xml"における3番目の<title>要素を取得するためgetElementsByTagname()メソッドを使用します。

length プロパティを用いてノードをループ
この例は、"books.xml"のすべての <title>要素をループするように、length プロパティを使用します。

要素のノードタイプを見る
この例は、"books.xml"のルート要素のノードタイプを、nodeTypeプロパティを用いて取得します。

要素ノードを通るループ
この例は、"books.xml"の要素ノードだけを処理するためにnodeTypeプロパティを用います。

ノードリレーションを用いた要素ノードをループ
この例は、"books.xml"の要素ノードを処理するために、nodeTypeプロパティとnextSiblingプロパティを用います。


ノードへのアクセス

3つの方法でノードにアクセスできます:

1. getElementsByTagName()メソッドを使用することによる。

2. ノードツリーをたどる(トラバース)ループによる。

3. ノード関係を用い、ノードツリーをナビゲートすることによる。


getElementsByTagName() メソッド

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

構文

node.getElementsByTagName("tagname");

次の例は、x要素の下の全<title>要素を返します:

x.getElementsByTagName("title");

上記例では、xノード下の<title> 要素だけを返すことに注意してください。 XML文書におけるすべての<title>要素を返すには、次のようにします:

xmlDoc.getElementsByTagName("title");

なお、xmlDocは文書そのもの(document node)とします。


DOM ノードリスト

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

次のコードは、 loadXMLDoc() を使用して、xmlDocに "books.xml"をロードし、変数xに<title> ノードのリスト(ノードリスト)を格納します:

xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.getElementsByTagName("title");

xの<title>要素には、インデックス値でアクセスできます。 3番目の<title> にアクセスするためには、次のように書きます::

y=x[2];

注: インデックスは0で始まります。

このチュートリアルの後章で、ノードリストをもう少し学習します。


DOM ノードリストの長さ

length プロパティはノードリストの長さ(ノード数)を定義します。

length プロパティを使用し、ノードリストをたどるループができます:

Example

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() を用い、 xmlDocに "books.xml" をロードします
  2. 全 <title> 要素のノードを取得します
  3. 各タイトル要素のテキストノードの値を出力します

ノードのタイプ

XML文書のdocumentElementプロパティはルートノードです。

ノードのnodeNameプロパティはノード名です。

ノードのnodeTypeプロパティはノードのタイプです。

このチュートリアルの次章でノードプロパティをもう少し学習します。

試してください


ノードのトラバース

次のコードは、ルートノードの要素ノードでもある子ノードを通るループをします:

Example

xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.documentElement.childNodes;

for (i=0;i<x.length;i++)
{
  if (x[i].nodeType==1)
  {//Process only element nodes (type 1)
  document.write(x[i].nodeName);
  document.write("<br />");
  }
}

試してください »

例の説明:

  1. loadXMLDoc() を用い、 xmlDoc に "books.xml" をロードします
  2. ルート要素の子ノードを取得します
  3. 各子ノードに対し、ノードタイプをチェックします。もしノードタイプが "1" なら、要素ノードです
  4. もし要素ノードなら、ノード名を出力します

ノード・リレーションをナビゲート

次のコードは、ノード・リレーションを使用することでノードツリーをナビゲートします:

Example

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)
  {//Process only element nodes (type 1)
  document.write(y.nodeName + "<br />");
  }
y=y.nextSibling;
}

試してください »
  1. loadXMLDoc() を用い、 xmlDoc に "books.xml" をロードします
  2. 最初の book 要素の子ノードを取得します
  3. "y" 変数に、最初の book 要素の最初の子ノードを設定します
  4. 各子ノード(子ノード "y" の最初のから開始)に対し:
  5. ノードタイプをチェックします。 もしノードタイプが "1" なら要素ノードです
  6. 要素ノードなら、ノード名を出力します
  7. 次の兄弟ノードを "y" 変数に設定し、再びループを繰返します

« 前章へ 次章へ »