PHP XML DOM


組み込みの DOM パーサーにより、PHP で XML ドキュメントを処理することが可能になります。


DOM とは?

W3C DOM は、HTML および XML ドキュメント向けの標準オブジェクトセットと、これらのドキュメントにアクセスして操作するための標準インターフェースを提供します。

W3C DOM は、異なる部分(Core、XML、HTML)と異なるレベル(DOM Level 1/2/3)に分けられます:

  • Core DOM - あらゆる構造化ドキュメント向けに標準オブジェクトセットを定義します
  • XML DOM - XML ドキュメント向けに標準オブジェクトセットを定義します
  • HTML DOM - HTML ドキュメント向けに標準オブジェクトセットを定義します

XML DOM についてさらに学ぶには、次のサイトをご覧ください:XML DOM チュートリアル。


XML 解析

XML ドキュメントを読み取り、更新 - 作成、処理 - するには、XML パーサーが必要です。

基本的な XML パーサータイプは2つあります:

  • ツリーベースのパーサー:このパーサーは XML ドキュメントをツリー構造に変換します。ドキュメント全体を解析し、ツリー内の要素へのアクセスを提供します(例:ドキュメントオブジェクトモデル (DOM))。
  • イベントベースのパーサー:XML ドキュメントを一連のイベントとして扱います。特定のイベントが発生すると、パーサーは関数を呼び出して処理します。

DOM パーサーはツリーベースのパーサーです。

次の XML ドキュメントの断片を見てください:

<?xml version="1.0" encoding="ISO-8859-1"?>
<from>Jani</from>

XML DOM は上記の XML をツリー構造と見なします:

  • Level 1: XML ドキュメント
  • Level 2: ルート要素: <from>
  • Level 3: テキスト要素: "Jani"

インストール

DOM XML パーサー関数は PHP コアの一部です。これらの関数はインストールなしで使用できます。


XML ファイル

次の XML ファイルをこの例で使用します:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>


XML の読み込みと出力

XML パーサーを初期化し、XML を読み込んで出力する必要があります:

例

<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("note.xml");

print $xmlDoc->saveXML();
?>

上記のコードは次のように出力します:

ToveJaniReminder Don't forget me this weekend!

ブラウザウィンドウでソースコードを表示すると、次の HTML が表示されます:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

上記の例では、DOMDocument-Object を作成し、"note.xml" の XML をこのドキュメントオブジェクトに読み込みます。

saveXML() 関数は内部の XML ドキュメントを文字列にして、出力できるようにします。


XML の走査

XML パーサーを初期化し、XML を読み込み、<note> 要素のすべての要素を走査します:

例

<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("note.xml");

$x = $xmlDoc->documentElement;
foreach ($x->childNodes AS $item)
{
    print $item->nodeName . " = " . $item->nodeValue . "<br>";
}
?>

上記のコードは次のように出力します:

#text =
to = Tove
#text =
from = Jani
#text =
heading = Reminder
#text =
body = Don't forget me this weekend!
#text =

上記の例では、各要素の間に空のテキストノードがあることがわかります。

XML が生成されるとき、通常ノード間に空白が含まれます。XML DOM パーサーはこれらを通常の要素として扱うため、注意しないと問題が発生することがあります。


XML DOM についてさらに学ぶには、次のサイトをご覧ください:XML DOM チュートリアル。

その他の拡張機能