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 が出力されます。

TIY

要素ノード間の空テキストを無視

要素ノード間の空テキストノードを無視する場合、ノードタイプを確認する必要があります。要素ノードのタイプは 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」の場合、要素ノードです。

TIY(簡単版) または TIY(完全版)