PHP マニュアル
前のページ |  | 次のページ

# 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 : &lt;foo&gt;bar&lt;/foo&gt;

> 注意: Windows を使用している場合、 file:// がパスの前に必要であることに注意してください。

前のページ | ホーム | 次のページ
xslt_getopt | 上に戻る | xslt_set_base