ノードの配列を取得するだけでなく、それを返すこともできるXSLTプロセッサにPHPユーザースペース関数を登録することは可能かどうか、またどのように可能でしょうか?
現在、PHPは、一般的な設定を使用した配列から文字列への変換について不平を言っています。
function all_but_first(array $nodes) {
array_shift($nodes);
shuffle($nodes);
return $nodes;
};
$proc = new XSLTProcessor();
$proc->registerPHPFunctions();
$proc->importStylesheet($xslDoc);
$buffer = $proc->transformToXML($xmlDoc);
変換するXMLDocument($xmlDoc
)は、たとえば次のようになります。
<p>
<name>Name-1</name>
<name>Name-2</name>
<name>Name-3</name>
<name>Name-4</name>
</p>
スタイルシート内では、次のように呼ばれます。
<xsl:template name="listing">
<xsl:apply-templates select="php:function('all_but_first', /p/name)">
</xsl:apply-templates>
</xsl:template>
通知は次のとおりです。
注意:配列から文字列への変換
関数が入力として配列を取得した場合、配列も返すことができないのはなぜですか?
私は他の「関数」名も試していましたがphp:functionString
、これまでに試したすべての名前(、、php:functionArray
およびphp:functionSet
)php:functionList
は機能しませんでした。
PHPのマニュアルには、別のDOMDocument
要素を含む要素を返すことができると書かれていますが、それらの要素は元のドキュメントからのものではなくなりました。それは私にはあまり意味がありません。