xslt_process
    (PHP 4 >= 4.0.3, PECL)
xslt_process -- XSLデータを有する文字列によりXMLデータを変換する
説明
mixed 
xslt_process ( resource xh, string xmlcontainer, string xslcontainer [, string resultcontainer [, array arguments [, array parameters]]] )
     xslt_process()関数は、新規XSLT拡張の中心関数で
     す。引数バッファの概念により、ほとんど全ての型の入力ソース -
     コンテナを用い
     てXSLT変換を実行可能です。引数バッファは、Sablotron XSLTプロセッ
     サ(現在、この拡張モジュールがサポートする惟一のXSLTプロセッサ)か
     ら得た概念です。
     入力コンテナは処理する文章を '含んでいる' ファイル名が
     デフォルトです。結果コンテナは、変換された文章のためのファイル名が
     デフォルトです。もし結果コンテナが指定されていない場合 - 例えば NULL -
     、結果が返されます。
    
     
| 警告 | 
       PHP 4.0.6 以降、この関数は xmlcontainer 関数
       もしくは xslcontainer 関数で
       XML 文字列を取りません。
       XML を含む文字列を渡すことで、0.95とそれ以降の Sablotron
       バージョンでセグメンテーションフォルトを引き起こします。
        | 
 
    
     また、arguments
     配列を通じてコンテナを設定することができます (以下参照)。
    
     xslt_process()関数で変換する最も簡単な方法は、
     XMLファイルをXSLTファイルで変換し、結果を新しいXMLドキュメント(ま
     たはHTMLドキュメント)を含む3番目のファイルに出力することです。
     これをsablotronを行うのは、かなり簡単です。
    
例 1. 
      XMLファイルとXSLファイルを新規XMLファイルに変換するために
      xslt_process()を使用する
      
<?php
  // 新規 XSLT プロセッサを割り当てる $xh = xslt_create();
  // 文章を処理する if (xslt_process($xh, 'sample.xml', 'sample.xsl', 'result.xml')) {     echo "SUCCESS, sample.xml was transformed by sample.xsl into result.xml";     echo ", result.xml has the following contents\n<br />\n";     echo "<pre>\n";     readfile('result.xml');     echo "</pre>\n"; } else {     echo "Sorry, sample.xml could not be transformed by sample.xsl into";     echo "  result.xml the reason is that " . xslt_error($xh) . " and the ";     echo "error code is " . xslt_errno($xh); }
  xslt_free($xh);
  ?>
 |  
  | 
     この機能は優れていますが、特にWeb環境では、結果を直接出力したい場
     合があります。そこで、xslt_process()の3番目の
     引数を省略した場合(またはその引数にNULL値を指定した場合)、ファイ
     ルに書き込む替わりに自動的にXSLT変換後の出力を返します。
    
     
例 2. 
       XMLファイルとXSLファイルを結果XMLデータを含む変数に変換するため
       にxslt_process()を使用する
       
<?php
  // 新規 XSLT プロセッサを割り当てる $xh = xslt_create();
  // 文章を処理し、変数 $result に結果を返す $result = xslt_process($xh, 'sample.xml', 'sample.xsl'); if ($result) {     print "SUCCESS, sample.xml was transformed by sample.xsl into the \$result";     print " variable, the \$result variable has the following contents\n<br>\n";     print "<pre>\n";     print $result;     print "</pre>\n"; } else {     print "Sorry, sample.xml could not be transformed by sample.xsl into";     print "  the \$result variable the reason is that " . xslt_error($xh) .     print " and the error code is " . xslt_errno($xh); }
  xslt_free($xh);
  ?>
 |  
  | 
    
     上の二つのケースは、XSLT変換の最も簡単な場合です。これは、多くの
     場合には通用しますが、時々、データベースまたはソケットのような外
     部ソースからXMLとXSLTコードを取得する場合があります。このような場
     合、XMLまたはXSLTデータを変数に有することになります。
     実用アプリケーションでは、これらをファイルにダンプする際のオーバー
     ヘッドは大きいと言えます。このような場合こそ、XSLT
     "argument" 構文が役に立ちます。
     xslt_process()関数のXMLおよびXSLT引数としてファ
     イルの替わりに引数配列(xslt_process()関数の5番
     目のパラメータ)で指定した値に置換される"argument place
     holders"を指定することが可能です。
     以下にファイルを全く使用せずにXMLおよびXSLTを結果変数に処理する例
     を示します。
    
     
例 3. 
       XMLデータを含む変数とXSLTデータを含む変数をXMLデータ出力結果を
       含む変数に変換するためにxslt_process()を使用
       する
       
<?php // $xml と $xsl は XML データと XSL データを含む
  $arguments = array(      '/_xml' => $xml,      '/_xsl' => $xsl );
  // 新規 XSLT プロセッサを割り当てる $xh = xslt_create();
  // 文章を処理する $result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments); if ($result) {     echo "SUCCESS, sample.xml was transformed by sample.xsl into the \$result";     echo " variable, the \$result variable has the following contents\n<br />\n";     echo "<pre>\n";     echo $result;     echo "</pre>\n"; } else {     echo "Sorry, sample.xml could not be transformed by sample.xsl into";     echo "  the \$result variable the reason is that " . xslt_error($xh);     echo " and the error code is " . xslt_errno($xh); } xslt_free($xh); ?>
 |  
  | 
    
     最後に、xslt_process() 関数の最後のパラメータは、
     XSLT 文章に渡したいトップレベルのパラメータの配列です。
     これらのパラメータは、<xsl:param name="parameter_name">
     命令を用いて XSL ファイルのなかでアクセスすることができます。
     パラメータは UTF-8 エンコードでなければなりません。また、
     その値は Sablotron
     プロセッサによって文字列として解釈されます。その他の場合、
     XSLT 文章へのパラメータとしてノードセットを渡すことはできません。
    
     
例 4. PHP 変数を XSL ファイルに渡す 
<?php
  // XML 文字列 $xml = '<?xml version="1.0"?> <para>  change me </para>';
  // XSL 文字列 $xsl = ' <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="ISO-8859-1" indent="no"  omit-xml-declaration="yes"  media-type="text/html"/>  <xsl:param name="myvar"/>  <xsl:param name="mynode"/>  <xsl:template match="/"> My PHP variable : <xsl:value-of select="$myvar"/><br /> My node set : <xsl:value-of select="$mynode"/>  </xsl:template> </xsl:stylesheet>';
 
  $xh = xslt_create();
  // 2番目のパラメータは文字列として解釈される $parameters = array (   'myvar' => 'test',   'mynode' => '<foo>bar</foo>' );
  $arguments = array (   '/_xml' => $xml,   '/_xsl' => $xsl );
  echo xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments, $parameters);
  ?>
 |  
 上の例の出力は以下となります。 My PHP variable : test<br>
My node set : <foo>bar</foo>  |  
  | 
    注意: Windows を使用している場合、
file:// がパスの前に必要であることに注意してください。