|
ここにある情報はかなり古くなっており、正しくなくなっている可能性があります。掲載しているサンプルコードiなどは、最新のPHPでは動作しない、もしくは、別途設定・調整が必要になるかも知れません。情報を鵜呑みにせず、あなたの手を動かして、あなたの目で確認してください。
[2004/01/30] PHP5からSimpleXML関数が追加されますが、こちらもXMLをオブジェクトとして扱える関数が揃っています
PHPマニュアル より。。。注意: この拡張は実験的なものではありません。しかしながら、PHP 5 では決してリリースされないでしょう。また、PHP 4 でのみ配布されます。 もし PHP 5 でDOM XML をサポートする必要がある場合、 DOM 拡張を使用することができます。 この domxml 拡張は DOM 拡張と互換性はありません。
PHP4.3.0ではほぼDOM2(だったと思います)をサポートするようです。最近では、DOM XMLに関しては、4.2.xではなく4.3.0を使っています(まだdevの状態ですが)。その代わり、PHP4.2.xと比べて大幅にAPIが変わっています。
PHP4.3.0のソースは、PHP本家のcvsから取得することができます。取得方法はPHP本家のcvsのページにもありますし、こちらにも手順をまとめていますので、是非チャレンジしてみて下さい。
さて、サンプルですが、まずはDOMのサポート手順のページにもあるサンプルです。今までのDOM関数と比べ、かなりオブジェクト指向的な書き方ができます。
<?php
$dom = domxml_new_doc("1.0");
$html = $dom->create_element("html");
$html->set_attribute("lang", "ja");
$root = $dom->append_child($html);
$head = $dom->create_element("head");
$title = $dom->create_element("title");
$text = $dom->create_text_node("test");
$title->append_child($text);
$head->append_child($title);
$root->append_child($head);
$body = $dom->create_element("body");
$text = $dom->create_text_node(mb_convert_encoding("テストです", "UTF-8"));
$body->append_child($text);
$root->append_child($body);
echo $dom->dumpmem();
echo "<hr>以下作成されたXMLドキュメントのソースです<br>";
echo "<pre>";
echo htmlspecialchars($dom->dumpmem());
echo "</pre>";
?>
次は、指定したXMLドキュメントの構造を一覧表示するというものです。
<?php
define("CHARSET", mb_internal_encoding());
?>
<?php
function parseTree($obj) {
switch ($obj->type) {
case XML_ELEMENT_NODE:
echo "要素名:" . mb_convert_encoding($obj->tagname, CHARSET, "utf-8") . "<br>";
$attr = $obj->attributes();
for ($i = 0; $i < count($attr); $i++) {
parseTree($attr[$i]);
}
$child = $obj->children();
for ($i = 0; $i < count($child); $i++) {
parseTree($child[$i]);
}
break;
case XML_ATTRIBUTE_NODE:
echo " 属性:" . mb_convert_encoding($obj->name(), CHARSET, "utf-8") . " = "
. mb_convert_encoding($obj->value(), CHARSET, "utf-8")
. "<br>";
break;
case XML_TEXT_NODE:
if (trim($obj->get_content()) != "") {
echo " 内容:" . mb_convert_encoding($obj->get_content(), CHARSET, "utf-8") . "<br>";
}
break;
}
}
$dom = domxml_open_file("domxml.xml");
$root1 = $dom->document_element();
parseTree($root1);
?>
●XMLドキュメント<?xml version="1.0"?>
<article attr1="php" attr2="domxml">
<subject>PHP関連書籍</subject>
<book>
<title>PHP4徹底攻略</title>
<isbn>ISBN4-7973-1392-7</isbn>
</book>
<book>
<title>Dynamic Webサイト構築入門 PHP編</title>
<isbn>ISBN-4898142818</isbn>
</book>
<book>
<title>Oracle8iとPHPで作るWebデータベースfor Miracle Linux</title>
<isbn>ISBN4871938670</isbn>
</book>
<book>
<title>PHPパーフェクトリファレンス</title>
<isbn>ISBN-4894714027</isbn>
</book>
</article>
●出力結果要素名:article 属性:attr1 = php 属性:attr2 = domxml 要素名:subject 内容:PHP関連書籍 要素名:book 要素名:title 内容:PHP4徹底攻略 要素名:isbn 内容:ISBN4-7973-1392-7 要素名:book 要素名:title 内容:Dynamic Webサイト構築入門 PHP編 要素名:isbn 内容:ISBN-4898142818 要素名:book 要素名:title 内容:Oracle8iとPHPで作るWebデータベースfor Miracle Linux 要素名:isbn 内容:ISBN4871938670 要素名:book 要素名:title 内容:PHPパーフェクトリファレンス 要素名:isbn 内容:ISBN-4894714027
今、このサンプルを元にちょっと面白いものを作っています(^-^)
|