[PHP-users 10091] Re: DOMの利用について

T.Yokoyama php-users@php.gr.jp
Fri, 13 Sep 2002 15:27:56 +0900


横山@Nextです。

> どうしてもDOMであれば、DOMXML関数が使えるのではないでしょうか?
> ちなみに、なぜXSLTではないのでしょうか?

現在、以下のようにXML文書情報をそのまま表示させるようにしています。
これらを配列に詰めれば、HTMLの中の任意の位置で利用できるのかと思いましたが、
「配列に詰める」という作業なしで、DOMXML関数を利用して
HTMLの任意の位置でデータ表示させることは可能なのでしょうか?
また、XSLTを利用すると上記のような単純な処理は簡単に行えるのでしょうか。
アドバイスを宜しくお願い致します。

<?php
 function parseTree($obj) {
  switch ($obj->type) {
  case XML_ELEMENT_NODE:
   echo "要素名:" . mb_convert_encoding($obj->tagname, "Shift_JIS",
"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(), "Shift_JIS", "utf-8")
. " = "
       . mb_convert_encoding($obj->value(), "Shift_JIS", "utf-8") . "<br>";
   break;
  case XML_TEXT_NODE:
   if (trim($obj->get_content()) != "") {
    echo "<font size='" . $GLOBALS["vSize"] . "'>  内容:" .
mb_convert_encoding($obj->get_content(), "Shift_JIS", "utf-8") .
"</font><br>";
   }
   break;
  }
 }

 // XMLの読み込み
 if(!$dom = domxml_open_file("sample.xml")) {
  echo "Error while parsing the document\n";
  exit;
 }

 // ルートの取得
 $root = $dom->document_element();

 // 解析の実行
 parseTree($root);
?>