XSLT (PHP 4) 関数
PHP Manual

xslt_process

(PHP 4 >= 4.0.3)

xslt_processXSLT による変換を行う

説明

mixed xslt_process ( resource $xh , string $xmlcontainer , string $xslcontainer [, string $resultcontainer [, array $arguments [, array $parameters ]]] )

xslt_process()関数は、XSLT 拡張モジュールの中心となる関数です。 ほとんど全ての型の入力ソース (コンテナ) を用いて XSLT 変換を実行可能です。 これを実現しているのが、引数バッファです。 引数バッファとは、Sablotron XSLT プロセッサ (現在、この拡張モジュールがサポートする惟一の XSLT プロセッサ) から得た概念です。 入力コンテナは処理する文章を '含んでいる' ファイル名がデフォルトです。

パラメータ

xh

xslt_create() で作成した XSLT プロセッサリンク ID。

xmlcontainer

XML ファイルへのパス、あるいは XML 引数用のプレースホルダ。

xslcontainer

XSL ファイルへのパス、あるいは XML 引数用のプレースホルダ。

resultcontainer

結果コンテナは、変換された文章のためのファイル名が デフォルトです。もし結果コンテナが指定されていない場合 - 例えば NULL - 、結果が返されます。

arguments

XMLXSLT のファイル名を xslt_process() 関数に指定するかわりに、"引数プレースホルダ" を使用することもできます。これは、配列 arguments に指定した内容で置き換えられます。

parameters

任意のトップレベルパラメータの配列。これが XSLT ドキュメントに渡されます。XSL ファイル内でこれらのパラメータにアクセスするには <xsl:param name="parameter_name"> を使用します。 パラメータは UTF-8 でエンコードする必要があります。 その値は文字列として Sablotron プロセッサが処理します。つまり、XSLT ドキュメントのパラメータには ノードセットを渡すことはできないということです。

また、arguments 配列を通じてコンテナを設定することができます (以下参照)。

返り値

成功した場合に TRUE を、失敗した場合に FALSE を返します。 結果コンテナを指定していない場合は結果を返します。

変更履歴

バージョン 説明
4.0.6 この関数は xmlcontainer もしくは xslcontainer で XML 文字列を受け付けなくなりました。 XML を含む文字列を渡すと、0.95とそれ以降の Sablotron バージョンでセグメンテーションフォルトを引き起こします。

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) {
    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変換の最も簡単な場合です。これは、多くの 場合には通用しますが、時々、データベースまたはソケットのような外 部ソースから XMLXSLT コードを取得する場合があります。このような場 合、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);
?>

例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 (PHP 4) 関数
PHP Manual