それは可能です(彼がPHPについて質問している場合、彼はほぼ確実にXSLT 1.0に制限されており、FXSLは彼が求めているものではないことを覚えておいてください)。
まず、PHPを自分で作成し、それをドキュメント処理フローの一部として使用することを計画している場合、これにはおそらく言語の選択が不適切です。独自のいくつかのPHP関数またはpreg_replaceなどの便利なライブラリ関数を使用してXSLの機能を少し拡張したい場合は、XSLTからそれらを呼び出すことができます。これらが何であるかを知っていれば、まったく問題ありません。 PHP関数をXSLTにエクスポートし、そこから呼び出すだけです。
ただし、実行するコードがドキュメントごとに異なる場合は、難しくなります(つまり、PHPを含む処理しようとしているドキュメントの命令を処理する場合、ドキュメントを評価するときにXSLTスクリプトで処理命令を実行する必要があります)。 )。関数を既知のセットに分解して、PHPから呼び出すだけですが、それができない場合でも試してみたい場合は、ハッカーに任せてください。
(PHPの関数をXSLTにエクスポートする方法を知っていると思います。通常のPHP関数をいくつか作成し、registerPHPFunctionsを使用してXSLTスクリプトにエクスポートし、XSLT内の関数として呼び出すだけです。ドキュメントを確認してください。)
XSLTスクリプトからドキュメントのPIでPHPコードを実行することに戻ります。
(自分でやるわけではありませんが、実装するのはそれほど難しいことではありません。)1回のパスでそれを行うことは不可能だと私は信じています。XSLTプロセッサを呼び出す必要があり、実行するPHPにアクセスするたびに、マーカータグ(例<phpmarker md5ofcode="php:md5(...)">
)を挿入して、呼び出し元のPHPにコードを戻します。ハッキーですが、潜在的に住みやすいです-それをxsl:messageに入れて、PHPのカスタムハンドラーからキャッチすることです。
最初の実行が終了したら、文字列を少し操作して、取得したコードの各ブロックのラッパー関数を作成し、その文字列を評価して関数を作成し、XSLTエンジンにエクスポートしてから、2番目のXSLTスクリプトで再呼び出しします。これはマーカーノードをキャットし、そのコンテンツでPHPを呼び出します。
ぶさいくな?はい。なぜそれが必要なのかを説明したいと思うかもしれませんが、それを機能させることは(2パスで)可能であるはずです。
編集:あなたの質問をもう数回読み直したので、私はますます混乱しています。XSLTでPIを実行してもよろしいですか?PIはドキュメントにアクセスし、それらがどのように処理されるかを説明します。PHPがXSLTファイルに含まれることを意図していて、それがタイプミスではない場合、少し混乱しているかもしれません。これは、PHPのregisterPHPFunctionsの単なるバニラアプリケーションです。PHPを別のファイルに入れて、XSLTから呼び出す必要があります。これは、XSLTスクリプトが2つのファイルに分割するのに十分な大きさになる前に多くの機能を含む必要がないことを考えると、大きな負担ではありません。