PHPのXSLT関数を使う

 PHPのXSLT関数を使うと、 PHPスクリプト上でXML文書から動的にHTML文書を生成して、クライアントブラウザに送り返すことができます。
 XSLT関数は、C言語で書かれたXSLTプロセッサのライブラリと組み合わせて使うことを前提に開発されていますが、 現在その役に供することのできるXSLTプロセッサは、 Sablotronだけです。 そこでここではSablotronと組み合わせて使う方法をご紹介します。 (といっても、PHPスクリプトのうえでは使うXSLTプロセッサを意識することは今後もほとんどないのだろうとは思いますが…)
 というわけで、XSLT関数を使うにはSablotronも必要です。 そして、Sablotronにはこちらの紹介ページにも書いた通り、 C言語で書かれたXMLパーサExpat も必要になります。 まとめますと、今回試した環境は次の通りです。
OSApachePHPExpatSablotron
MS-WindowsXP Home Edition2.0.434.3.0RC2 1.95.20.96

セットアップ手順

  1. まずExpat、Sablotronをインストールします。
    Expatはいいとして、 Sablotronは日本語エンコーディングのサポートがあるかどうかによって、 XSLT関数が 日本語EUCやシフトJISで書かれたXML文書が扱えるかどうかの人生分かれ道になります。 これらのセットアップ方法はこちらに上げています。 これで、SablotronについているコマンドラインのXSLTプロセッサ 「sabcmd.exe」を使用してみて、DLLがないとか言われずに処理ができることを確認します。
  2. Apacheが動いている場合は、停止します。
  3. php.ini(Windowsの場合はC:\Windows\php.ini)をテキストエディタで編集し、 「extensions」セクションの次の行の先頭のセミコロンを取って有効にします。

    extension=php_xslt.dll
    

    なお「php_sablot.dll」という行もありますが、このバージョン(4.3.0) にはphp_sablot.dllなるDLLは同梱されていないようなので、 それはコメントのままでOKです。
  4. Apacheを起動します。ここでエラーにならずに動けば、 DLLどもが正しく認識されたと考えてOKです。

XSLT関数を使う

<?php
  // 相対パスはApacheのホームディレクトリからの参照になるので注意
  $xmlfile = "/usr/data/orders.xml";
  $xslfile = "/usr/data/document-all.xsl";

  $t = xslt_create();
  $html = xslt_process($t, $xmlfile, $xslfile);

  if($html) {    
    print $html;
  }
  else {    
    die(sprintf("The XSLT processor failed [%d]: %s",
        xslt_errno($t), xslt_error($t) ) );
  }
  xslt_free($t);
?>

 はてさて、ごくごく簡単なXSLT変換のサンプルです。 まず、xslt_create関数で、 XSLTハンドルとでも言ふべきものを作ります。以後の関数ではこのハンドルを引数に使用します。 そして次に、というか、XSLT変換を行うには基本的には xslt_process関数だけで充分です。 この関数は

mixed xslt_process(resource xh, string xml, string xsl
 [, string result [, array arguments [, array parameters]]])

というプロトタイプをしていて、2番目の引数がXML文書のファイル名 (XML文書の内容を格納した文字列ではない点に注意)、 3番目の引数がXSLスタイルシートのファイル名です。 4番目の引数を省略すると、XSLT変換によってできたHTML文書の内容が戻り値として返されます。 そうでなければ(つまり、4番目の引数を指定したなら) そのファイルにHTML文書の内容が出力されます。 5番目、6番目の引数はXSLTスタイルシートにパラメータを渡すために使うもので、 詳しくはここでは省略します。 で、変換中にエラーが発生したらFALSEが変えるので、 そのときのエラーコードはxslt_errno関数、 エラーメッセージはxslt_error関数で取得できます。

Open Source Web Architecture Top

(first uploaded 2002/12/23 last updated (not ever), URANO398)

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル