DOMアクセス
XML DOM - ノードへのアクセス
DOM を使用すると、XML ドキュメント内のすべてのノードにアクセスできます。
試してみる - 例
以下の例では、XML ファイル Books.xml を使用します。
外部JavaScriptにある関数loadXMLDoc()は、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() は、指定されたタグ名を持つすべての要素を返します。 syntax
xmlDoc.getElementsByTagName("title");
ここで、xmlDoc はドキュメント自体 (ドキュメント ノード) です。getElementsByTagName()メソッドはノードリストを返します。ノード リストはノードの配列です。
x の <title> 要素には、インデックス番号を介してアクセスできます。 3 番目の <title> にアクセスするには、次のように記述できます:
y=x[2];
注: インデックスは 0 から始まります。
このチュートリアルの後の章では、ノード リストについて詳しく学習します。
DOM ノード リストの長さ
length 属性は、ノード リストの長さ (つまり、ノードの数) を定義します。
長さ属性を使用してノード リストを移動できます:
インスタンス
<!DOCTYPE html> <html> <head> <script src="loadxmldoc.js"></script> </head> <body> <script> 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>"); } </script> </body> </html>
インスタンスの実行»
「インスタンスの実行」ボタンをクリックしてオンライン例を表示します
インスタンスの説明:
-
loadXMLDoc( ) を使用して、「books.xml」を xmlDoc にロードします
すべての <title> 要素ノードを取得します
各 <title> 要素のテキスト ノードの値を出力します
)
XML ドキュメントの documentElement 属性はルート ノードです。
node の nodeName 属性は、ノードの名前です。
node の nodeType 属性は、ノードのタイプです。
このチュートリアルの次の章でノードのプロパティについて詳しく学習します。
試してみる
ノードを走査
次のコードは、要素ノードでもあるルートノードの子ノードを走査します:
インスタンス
<!DOCTYPE html> <html> <head> <script src="loadxmldoc.js"></script> </head> <body> <script> 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>"); } } </script> </body> </html>
インスタンスの実行»
「インスタンスの実行」をクリックします」オンライン例を表示するボタン
例の説明:
loadXMLDoc()を使用して「books.xml」をxmlDocにロードします
ルート要素の子ノードを取得します
ノードタイプを確認します各子ノードの。ノードタイプが「1」の場合、要素ノードです
要素ノードの場合、ノードの名前が出力されます
ナビゲーションノードの関係
次のコードは、ノードの関係を使用して、ノード ツリーに移動します:
例
<!DOCTYPE html> <html> <head> <script src="loadxmldoc.js"></script> </head> <body> <script> 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; } </script> </body> </html>
例の実行»
[例の実行] ボタンをクリックしてオンライン例を表示します
loadXMLDoc() を使用して「books.xml」を xmlDoc にロードします
最初のbook要素を取得します
の子ノードを最初のbook要素の最初の子ノードに「y」変数を設定します
各子ノードについて(最初の子ノードは「y」から始まります) ")、ノードのタイプを確認し、ノードのタイプが「1」の場合は要素ノードです
要素ノードの場合は、ノードの名前を出力します
「y」変数を次のように設定します次の兄弟ノードに移動し、ループを再度実行します