XML DOM - ノードへのアクセス
DOMにより、XML文書のすべてのノードにアクセスできます。
 |
試してください - 例 |
次の例では、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> にアクセスするためには、次のように書きます::
注: インデックスは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 />");
}
|
試してください »
|
例の説明:
- loadXMLDoc() を用い、
xmlDocに "books.xml" をロードします
- 全 <title> 要素のノードを取得します
- 各タイトル要素のテキストノードの値を出力します
ノードのタイプ
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 />");
}
}
|
試してください »
|
例の説明:
- loadXMLDoc() を用い、
xmlDoc に "books.xml" をロードします
- ルート要素の子ノードを取得します
- 各子ノードに対し、ノードタイプをチェックします。もしノードタイプが "1" なら、要素ノードです
- もし要素ノードなら、ノード名を出力します
ノード・リレーションをナビゲート
次のコードは、ノード・リレーションを使用することでノードツリーをナビゲートします:
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;
}
|
試してください »
|
- loadXMLDoc() を用い、
xmlDoc に "books.xml" をロードします
- 最初の book 要素の子ノードを取得します
- "y" 変数に、最初の book 要素の最初の子ノードを設定します
- 各子ノード(子ノード "y" の最初のから開始)に対し:
- ノードタイプをチェックします。 もしノードタイプが "1" なら要素ノードです
- 要素ノードなら、ノード名を出力します
- 次の兄弟ノードを "y" 変数に設定し、再びループを繰返します
|