XSLT エンジンにノード集合渡したいことが多々あるけど、params にナマの XML を渡しても当たり前にサニタライズされたただの文字列が渡るだけ。じゃあどうすりゃいいねんと諦めていたわけだけど、FOAF Explorer のソース見ててわかった。arguments のほうに XML とか XSLT とか渡すのと同じように渡せばいいんだ。
Sablotron は arguments を内部的に URI として (スキーム arg:) 扱っているから、そっちに適当に渡してやればやりほうだいらしい。エロイ。
$arguments = array( '/_xml' => file_get_contents($xml), '/_xsl' => file_get_contents($xsl), '/foo' => "<test><f>aa</f><f>bb</f></test>" ); $result = xslt_process($xh, 'arg:/_xml', "arg:/_xsl", NULL, $arguments);
で、XSLT 側からは document('arg:/foo')
でアクセスできる。結局 <xsl:param name="foo" select="document('arg:/foo')"/>
とかやっとけば OK。Sablotron イイ