XML DOM ブラウザの差異
異なるブラウザはXML DOMで空テキストノードを処理する方法が異なります。
インスタンス
以下の例では、XMLファイルを使用 books.xml。
関数 loadXMLDoc()、外部JavaScriptに配置され、XMLファイルをロードするために使用されます。
- ノードリストの長さを表示
- この例では、ノードリストの長さを表示します。IEおよび他のブラウザでは結果が異なります。
- 要素ノード間の空テキストを無視
- この例では、ノードのnodeTypeをチェックし、要素ノードのみを処理します。
ブラウザ間のDOM解析の違い
すべての現代ブラウザはW3C DOM規格をサポートしています。
ただし、ブラウザ間には違いがあります。重要な違いは2点です:
- XMLの読み込み方法
- 空白と改行の処理方法
“XML DOM の解析”このセクションでは、XMLの読み込み方法について説明しました。
このセクションでは、空白や改行の処理方法について説明します。
DOM - 空白と改行
XMLはノード間に改行や空白文字を含むことがよくあります。これはシンプルなエディタ(例えばノートパソコン)を使用する際によくある問題です。
以下の例(ノートパソコンで編集)は、各行間にCR/LFがあり、各サブノードの前に2つのスペースがあります:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
Firefoxおよび他のブラウザは、空のスペースや改行をテキストノードとして処理しますが、Internet Explorerはそうではありません。
以下のコードスニペットは、(books.xmlの)ルート要素がどれだけの子ノードを持っているかを示しています:
xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.documentElement.childNodes; document.write("Number of child nodes: " + x.length);
例を説明します:
- 使用することで loadXMLDoc() "books.xml"xmlDoc" に読み込みます。
- ルート要素の子ノードを取得します。
- 子ノードの数を出力
結果は使用しているブラウザによって異なります。Firefox は 9、IE は 4 が出力されます。
要素ノード間の空テキストを無視
要素ノード間の空テキストノードを無視する場合、ノードタイプを確認する必要があります。要素ノードのタイプは 1 です:
xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.documentElement.childNodes; for (i=0;i<x.length;i++) { if (x[i].nodeType==1) {// たとえば要素ノードのみ処理 document.write(x[i].nodeName); document.write("<br />"); } }
例を説明します:
- 使用することで loadXMLDoc() "books.xml"xmlDoc" に読み込みます。
- ルート要素の子ノードを取得します。
- 各子ノードのノードタイプを確認します。ノードタイプが「1」の場合、要素ノードです。