XML DOM ノードのアクセス
DOM を通じて、XML ドキュメント内の各ノードにアクセスできます。
ノードのアクセス
ノードにアクセスする方法は以下の3種類があります:
- getElementsByTagName() メソッドを使用して
- ノードツリーをループ(巡回)して
- ノードの関係を利用してノードツリーをナビゲート
getElementsByTagName() メソッド
getElementsByTagName()
指定されたタグ名を持つすべての要素を返します。
文法
node.getElementsByTagName("tagname");
例
以下の例では、x ノードの下のすべての <title> 要素を返します:
x.getElementsByTagName("title");
注意してください、上記の例は x ノードの下の <title> 要素のみを返します。XML ドキュメント内のすべての <title> 要素を返すには、以下を使用してください:
xmlDoc.getElementsByTagName("title");
ここでは、xmlDoc
これはドキュメント自体(ドキュメントノード)です。
DOM ノードリスト
getElementsByTagName()
方法返回节点列表(node list)。节点列表是节点的数组。
メソッドはノードリスト(ノードリスト)を返します。ノードリストはノードの配列です。
x = xmlDoc.getElementsByTagName("title");
x[2]をインデックスでアクセスできます。x[3]にアクセスするには、以下のように書きます:
y = x[2];注:
インデックスは0から始まります。
length
DOMノードリストの長さ
属性を使用してノードリストの長さ(ノード数)を定義できます。 length
属性を使用してノードリストをループで巡回します:
例
var x = xmlDoc.getElementsByTagName("title"); for (i = 0; i < x.length; i++) { // ここに各ノードを処理するコードを書きます }
ノードタイプ
XMLドキュメントの documentElement
属性はルートノードです。
ノードの nodeName
属性はノードの名前です。
ノードの nodeType
属性はノードのタイプです。
次の章でノード属性に関するより多くの内容を学びます。
ノードの巡回
以下のコードはルートノードの子ノード(要素ノードでもあります)をループで巡回します:
例
txt = ""; x = xmlDoc.documentElement.childNodes; for (i = 0; i < x.length; i++) { // 元素ノード(タイプ 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++) { // 元素ノード(タイプ 1)のみを処理 if (y.nodeType == 1) { txt += y.nodeName + "<br>"; } y = y.nextSibling; }
例説明:
- 「」を既にロードしていると仮定しますbooks.xml「」に
xmlDoc
- 最初の book 要素の子要素を取得します
- "変数を最初の book 要素の最初の子ノードに設定します
- 各子ノード(最初の子ノード"
y
"で始まる場合(): - 各子ノードのノードタイプを確認します。ノードタイプが"
1
"の場合、それは要素ノードです - 要素ノードの場合、そのノードの名前を出力します
- "を設定します
y
"変数を次の同級ノードに設定し、再度ループを実行します