我使用PHP XML和XSL生成文档。如果您熟悉PHP实现,您可能知道XSL函数 tokenize(字符串,模式)不可用。我试图在PHP中实现该功能,以便可以在XSL中调用它,如此
<xsl:value-of select="php:function('tokenize','aaa bbb ccc',' ')[last()]"/>
应生成'ccc'
问题是我找不到将简单字符串组成的节点集合返回到XSL的方法。当我尝试发送DOMNodeList时,我得到“一个PHP对象无法转换为XPath-string”错误。 PHP手册中没有记录在PHP中编写XSL扩展函数的技术。有些大师可以对此有所了解吗?
这是我目前的工作。我能够在XSL中执行以下操作
<xsl:value-of select="php:function('tokenizeIntoXML',$stop_at_class,' ')/node()[last()]"/>
使用这个PHP函数
function tokenizeIntoXML($string, $delimiter)
{
$ret = null;
$toks = explode($delimiter, $string);
if(!empty($toks))
{
$xml = new DomDocument();
$xml -> loadXML("<result/>");
foreach($toks as $t)
{
$xml -> documentElement -> appendChild(new DOMText($t));
}
return $xml -> documentElement;
}
return $ret;
}
答案 0 :(得分:0)
错误,如果你为exslt包含相应的命名空间,你实际上可以使用here描述的tokenize。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://exslt.org/strings"> <!-- here -->
<xsl:output
method="xml"
omit-xml-declaration="yes"
media-type="text/html"
encoding="UTF-8"
indent="yes"
/>
<xsl:template match="/">
<xsl:value-of select="fn:tokenize('a,b,c', ',')"/>
</xsl:template>
</xsl:stylesheet>
在win764 XAMPP(apache2.2 php5.3)上测试