PHP XML DOM パーサ

❮ 前章へ 次章へ ❯

組み込みのDOMパーサは、PHP内のXML文書の処理を可能にします。


XML DOM パーサ

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

次のXML文書の一部を見てください:

<?xml version="1.0" encoding="UTF-8"?>
<from>Jani</from>

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


インストール

DOMパーサ関数はPHPコアの一部です。この関数を使用するためのインストールは必要ありません。


XMLファイル

下のXMLファイル("note.xml")を、この例で使用します:

<?xml version="1.0" encoding="UTF-8"?>
<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();
?>

上のコードの出力は次のようになります:

Tove Jani Reminder Don't forget me this weekend!

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

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

上の例では、DOMDocumentオブジェクトを作成し、それに"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 XMLチュートリアルをご覧ください。


❮ 前章へ 次章へ ❯