XMLDOM-ノードへのアクセス
DOMを使用すると、XMLドキュメント内のすべてのノードにアクセスできます。
自分で試してみてください-例
以下の例では、XMLファイルbooks.xmlを使用しています。
getElementsByTagName()メソッドを使用して、「books.xml」の3番目の<title>要素を取得します。
を使用して、「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ノードリスト
getElementsByTagName()メソッドはノードリストを返します。ノードリストはノードの配列です。
x = xmlDoc.getElementsByTagName("title");
xの<title>要素には、インデックス番号でアクセスできます。3番目の<title>にアクセスするには、次のように記述します。
y = x[2];
注:インデックスは0から始まります。
ノードリストの詳細については、このチュートリアルの後の章で学習します。
DOMノードリストの長さ
lengthプロパティは、ノードリストの長さ(ノードの数)を定義します。
lengthプロパティを使用して、ノードリストをループできます。
例
var
x = xmlDoc.getElementsByTagName("title");
for (i = 0; i <x.length; i++) {
//
do something for each node
}
ノードタイプ
XMLドキュメントのdocumentElementプロパティはルートノードです。
ノードのnodeNameプロパティは、ノードの名前です。
ノードのnodeTypeプロパティは、ノードのタイプです。
このチュートリアルの次の章で、ノードのプロパティについて詳しく学習します。
トラバースノード
次のコードは、ルートノードの子ノード(要素ノードでもある)をループします。
例
txt = "";
x = xmlDoc.documentElement.childNodes;
for (i = 0; i <x.length; i++)
{
// Process only element nodes (type 1)
if (x[i].nodeType == 1) {
txt += x[i].nodeName + "<br>";
}
}
説明された例:
- 「 books.xml」をxmlDocにロードしたとします。
- ルート要素の子ノードを取得します(xmlDoc)
- 子ノードごとに、ノードタイプを確認します。ノードタイプが「1」の場合、それは要素ノードです
- 要素ノードの場合はノード名を出力します
ノード関係のナビゲート
次のコードは、ノードの関係を使用してノードツリーをナビゲートします。
例
x = xmlDoc.getElementsByTagName("book")[0];
xlen = x.childNodes.length;
y = x.firstChild;
txt = "";
for (i = 0; i <xlen; i++)
{
// Process only element nodes (type 1)
if (y.nodeType == 1) {
txt += y.nodeName + "<br>";
}
y = y.nextSibling;
}
説明された例:
- 「 books.xml」をxmlDocにロードしたとします。
- 最初のbook要素の子ノードを取得します
- 「y」変数を最初のbook要素の最初の子ノードに設定します
- 子ノードごとに(最初の子ノード「y」から開始):
- ノードタイプを確認してください。ノードタイプが「1」の場合、それは要素ノードです
- 要素ノードの場合はノード名を出力します
- 「y」変数を次の兄弟ノードに設定し、ループを再度実行します