return node-set to stylesheet via php:function
| From: | (kwmccabe) | Date: | Thu, 23 Feb 2006 21:02:55 +0000 |
| Subject: | return node-set to stylesheet via php:function | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-230984@lists.php.net to get a copy of this message | ||
using: RedHat ; PHP 5.1.2 ; libxml 2.6.22
How do I return a node-set to an xsl stylesheet via php:function?
I've had no difficulty returning strings, but so far xsl refuses to see the result as something I can iterate as real XML.
php fragment:
-----------------------------
// return String
function getNodesOne()
{
return '<RESULT><NODE>foo</NODE><NODE>bar</NODE></RESULT>';
}
// return DomDocument
function getNodesTwo()
{
$xml = '<RESULT><NODE>foo</NODE><NODE>bar</NODE></RESULT>';
$doc = DomDocument::loadXML($xml);
return $doc;
}
-----------------------------
xsl fragment:
-----------------------------
<xsl:variable name="nodes">
<xsl:copy-of select="php:function('getNodes')" />
</xsl:variable>
cnt=<xsl:value-of select="count($nodes/RESULT/NODE)" />
-----------------------------
expected result: cnt=2
actual result:
cnt=0
Same result calling php:function('getNodesOne') or php:function('getNodesTwo').
In both case, the xsl variable $nodes contains a string, not an actual node-set that can be iterated and otherwise worked with. $nodes/RESULT, like $nodes/RESULT/NODE, doesn't exist.
I also tried this, but it returns an empty node-set and not even a string:
-----------------------------
<xsl:copy-of select="document(php:function('getNodes'))" />
-----------------------------
Finally, I've also tried this, but libxml2 evidently does not support the inline-data URI form:
-----------------------------
<xsl:variable name="tmp">
<xsl:value-of select="php:function('getNodes')" />
</xsl:variable>
<xsl:variable name="nodes">
<xsl:copy-of select="document(concat('data:text/xml,',$tmp))" />
</xsl:variable>
-----------------------------
So, in all cases/combos of the above code, I get a string or an empty node-set.
Clearly, there should be a way to get a node-set via php:function, without creating a temporary xml file and without making a full request to apache.
Am I missing something? Is something broken or, worse, broken by design?
Any help would be greatly appreciated.
thanks