|
ここにある情報はかなり古くなっており、正しくなくなっている可能性があります。掲載しているサンプルコードiなどは、最新のPHPでは動作しない、もしくは、別途設定・調整が必要になるかも知れません。情報を鵜呑みにせず、あなたの手を動かして、あなたの目で確認してください。
[2002/01/29] PHP4.1.0より新しいAPIが採用されています。詳しくはPHP 4.1.0のChangeLogをどうぞ。ちなみに、ここで解説しているxslt_set_sax_handler関数は削除され、xslt_set_sax_handlers関数(紛らわしい。。。)が追加されています。
XSLT関数の1つとして用意されているxslt_set_sax_handler関数をちょっと試してみました。
XMLパース関数のものと比べ、関数に渡すパラメータなどが異なります。sablot.cを見たり、実際に試してみて分かったことを以下に示します。
- handlerは連想配列で渡す必要がある
- 連想配列のキーには、「document」「element」「namespace」「comment」「pi」「characters」が指定可能
- キーに対する値としては、開始・終了ハンドラの関数名を配列として指定する。片方しかない場合はそれを書かなければよいが、配列でないとエラーになる
- elementに対するハンドラの引数は、xml_set_element_handler関数と同様、「XMLパーサへのリファレンス(リソースID)」「タグ名(文字列)」「属性(連想配列)」となる
以下のサンプルでは、SAXハンドラを使って、タグ名と属性名・値を全て表示し、XSLT変換結果を表示します。
<?php
$xml_file = "test.xml";
$xsl_file = "test.xsl";
$handler = array("element" => array("startElement", "endElement"));
$xslt = xslt_create();
if (phpversion() >= "4.1.0") {
xslt_set_sax_handlers($xslt, $handler);
echo xslt_process($xslt, $xml_file, $xsl_file);
}
else {
xslt_set_sax_handler($xslt, $handler);
xslt_run($xslt, $xsl_file, $xml_file);
echo xslt_fetch_result($xslt);
}
xslt_free($xslt);
?>
<?php
function startElement($parser, $name, $attrs) {
echo "●startElement<br>";
echo "tag => $name<br/>";
print_r($attrs);
echo "<p>";
}
function endElement($parser, $name) {
echo "●endElement<br>";
echo "tag => $name<br/>";
echo "<p>";
}
?>
|