XML DOMの解析

ほとんどのブラウザは、XMLを読み取り操作するための XML パーサーを内蔵しています。

パーサーは XML を JavaScript がアクセスできるオブジェクトに変換します。

CodeW3C.com が提供する例は、ブラウザやプラットフォームに関係なく独立しています。これらの例はすべて現代のブラウザで動作します。

XML ファイルをロードおよび解析します
XML 字列をロードおよび解析します

XML を解析します

すべての現代ブラウザは、XMLを読み取り操作するための XML パーサーを内蔵しています。

パーサーは XML をメモリに読み込み、それを JavaScript がアクセスできる XML DOM オブジェクトに変換します。

マイクロソフトの XML パーサーは、他のブラウザのパーサーとは異なります。マイクロソフトのパーサーは XML ファイルと XML 字符列(テキスト)のロードをサポートしていますが、他のブラウザは別々のパーサーを使用しています。ただし、すべてのパーサーは XML ツリーを巡回し、ノードにアクセス、挿入、削除する関数を含んでいます。

このチュートリアルでは、IE その他のブラウザで動作するスクリプトを作成する方法をお伝えします。

マイクロソフトの XML パーサーで XML をロードします。

マイクロソフトの XML パーサーは Internet Explorer 5 以降のバージョンに内蔵されています。

以下のJavaScriptスクリプトはXMLドキュメント ("books.xml) 解析器にロードしました:

xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("books.xml");

コードの説明:

  • 最初の行で空のマイクロソフト XML ドキュメントオブジェクトを作成します。
  • 第二行は非同期ロードをオフにし、ドキュメントが完全にロードされる前に解析器がスクリプトを実行しないようにします
  • 第三行は解析器に「books.xml」という名前のドキュメントをロードするように指示します

以下のJavaScriptスクリプトは名前の文字列「txt」を解析器にロードします:

xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(txt);

注記:loadXML() このメソッドは文字列(テキスト)をロードするために使用され、 load() ファイルをロードするためのものです。

Firefoxおよび他のブラウザでのXML解析器

以下のJavaScriptスクリプトはXMLドキュメント ("books.xml) 解析器にロードしました:

xmlDoc=document.implementation.createDocument("","",null);
xmlDoc.async="false";
xmlDoc.load("books.xml");

コードの説明:

  • 第一行は空のXMLドキュメントオブジェクトを作成します
  • 第二行は非同期ロードをオフにし、ドキュメントが完全にロードされる前に解析器がスクリプトを実行しないようにします
  • 第三行は解析器に「books.xml」という名前のドキュメントをロードするように指示します

以下のJavaScriptスクリプトは名前の文字列「txt」を解析器にロードします:

parser=new DOMParser();
xmlDoc=parser.parseFromString(txt,"text/xml");

コードの説明:

  • 第一行は空のXMLドキュメントオブジェクトを作成します
  • 第二行は解析器に「txt」という名前の文字列をロードするように指示します

注記:Internet Explorerでは loadXML() メソッドを使用してXML文字列を解析し、他のブラウザでは DOMParser オブジェクト。

XMLファイルの解析 - クロスブラウザの例

以下の例では、XMLドキュメント ("books.xml) XML解析器をロードします:

<html>
<body>
<script type="text/javascript">
try //Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  }
catch(e)
  {
  try //Firefox, Mozilla, Opera, etc.
    {
    xmlDoc=document.implementation.createDocument("","",null);
    }
  catch(e) {alert(e.message)}
  }
try 
  {
  xmlDoc.async=false;
  xmlDoc.load("books.xml");
  document.write("xmlDoc is loaded, ready for use");
  }
catch(e) {alert(e.message)}
</script>
</body>
</html>

TIY

エラー: ドメイン間のアクセス

セキュリティの理由から、現代のブラウザはドメイン間のアクセスを許可しません。

これは、ウェブページとそれが読み込もうとするXMLファイルが同じサーバー上に存在する必要があることを意味します。

CodeW3C.comの例で開かれたXMLファイルはCodeW3C.comのドメイン上にあります。

上記の例を使用して自分のウェブページにXMLファイルをアップロードする場合は、XMLファイルを自分のサーバーに配置する必要があります。さもなければ、xmlDoc.load()は「アクセスが拒否されました」というエラーが発生します。

XML文字列の解析 - クロスブラウザの例

以下のコードはXML文字列をロードし解析しました:

<html>
<body>
<script type="text/javascript">
text="<bookstore>"
text=text+"<book>";
text=text+"<title>Harry Potter</title>";
text=text+"<author>J K. Rowling</author>";
text=text+"<year>2005</year>";
text=text+"</book>";
text=text+"</bookstore>";
try //Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async="false";
  xmlDoc.loadXML(text);
  }
catch(e)
  {
  try //Firefox, Mozilla, Opera, etc.
    {
    parser=new DOMParser();
    xmlDoc=parser.parseFromString(text,"text/xml");
    }
  catch(e) {alert(e.message)}
  }
document.write("xmlDoc is loaded, ready for use");
</script>
</body>
</html>

TIY

注記:Internet Explorer は loadXML() メソッドを使用して XML 字列を解析し、他のブラウザは DOMParser オブジェクト