|
ここにある情報はかなり古くなっており、正しくなくなっている可能性があります。掲載しているサンプルコードiなどは、最新のPHPでは動作しない、もしくは、別途設定・調整が必要になるかも知れません。情報を鵜呑みにせず、あなたの手を動かして、あなたの目で確認してください。
[2002/01/29] PHP4.1.0より新しいAPIが採用されています。詳しくはPHP 4.1.0のChangeLogをどうぞ。
XSLT関数にもまだ(PHP4.0.6で2001/10/13現在)ドキュメント化されていない以下の関数があるようです。
- xslt_set_encoding関数
- xslt_set_error_handler関数
まずは、xslt_set_encoding関数ですが、<xsl:output encoding="...">で指定されたエンコーディングを強制的に変更する関数です。test.xslで<xsl:output encoding="utf-8">などshift_jis以外のエンコーディングを指定し、以下のスクリプトを実行してみてください。
<?php
$xml_file = "test.xml";
$xsl_file = "test.xsl";
$xslt = xslt_create();
xslt_set_encoding($xslt, "shift_jis");
xslt_run($xslt, $xsl_file, $xml_file);
echo xslt_fetch_result($xslt);
xslt_free($xslt);
?>
次に、xslt_set_error_handler関数ですが、XSLT変換時のエラーハンドラを指定する関数です。この関数の引数は、
- XSLTプロセッサのリソースID
- ハンドラの関数名
の順です。また、ハンドラの引数は、
- XSLTプロセッサのリソースID
- エラー番号(=xslt_errno関数で取得できるものと同じ)
- レベル
- その他情報
の4つのようです。特に4つ目のその他情報からは、エラーが発生したXSLTファイル名や行番号が取得できますので、デバッグに使えます。。。というか、使ってます (^-^)
<?php
$xml_file = "test.xml";
$xsl_file = "test.err.xsl";
$xslt = xslt_create();
xslt_set_error_handler($xslt, "handle_xslt_error");
xslt_run($xslt, $xsl_file, $xml_file);
echo xslt_fetch_result($xslt);
xslt_free($xslt);
?>
<?php
function handle_xslt_error($xh, $errno, $level, $fields){
echo "<hr/>";
echo "<p>ここからハンドラから取得したもの</p>";
echo "xslt_errno(\$xh)=" . xslt_errno($xh) . "<br/>";
foreach(xslt_error($xh) as $k => $v) echo "$k => $v<br>";
echo "<p>ここから引数</p>";
echo "\$errno=$errno<br/>";
echo "\$level=$level<br/>";
foreach($fields as $k => $v) echo "$k => $v<br>";
echo "<b>" . $fields["msg"] . " in " . $fields["URI"] . ", line " . $fields["line"] . "</b><br/>";
}
?>
|