我收到错误:
警告:
XSLTProcessor::transformToXml()
:xmlXPathCompOpEval
:在...中找不到功能函数
PHP代码:
$this->proc=new XSLTProcessor;
$this->proc->registerPHPFunctions();
if (!$this->proc->importStylesheet($new_xslt)) throw new Exception('XSLT content cannot load');
if (!$data=$this->proc->transformToXml($this->xml_dom)) {
throw new Exception('XML changing with XSLT error unknow');
}
XSL模板:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:php="http://php.net/xsl" >
<xsl:output method="html" encoding="utf-8" indent="yes" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
doctype-system="http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd"/>
<xsl:include href="default.xsl"/>
<xsl:variable name="start"/>
<xsl:template match="/response">
<html>
<xsl:apply-templates select="headers"/>
<body>
<div class="body" id="body">
<xsl:call-template name="main.block">
</xsl:call-template>
</div>
<div align="center" class="copy">©
<xsl:value-of select="php:function('date', 'Y')"/> here should be date
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
还尝试使用extension-element-prefixes和xsl:namespace-alias:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:php="http://php.net/xsl"
xsl:extension-element-prefixes="php">
<xsl:output method="html" encoding="utf-8" indent="yes" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
doctype-system="http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd"/>
<xsl:namespace-alias stylesheet-prefix="php" result-prefix="xsl"/>
<xsl:include href="default.xsl"/>
<xsl:variable name="start"/>
<xsl:template match="/response">
<html>
<xsl:apply-templates select="headers"/>
<body>
<div class="body" id="body">
<xsl:call-template name="main.block">
</xsl:call-template>
</div>
<div align="center" class="copy">©
<xsl:value-of select="php:function('date', 'Y')"/> here should be date
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
如果我从模板中删除php函数,我看到没有错误。
这段代码看起来还可以,并且使用php 5.3在webserver上工作但是在我的本地电脑上使用php 5.6无效
所有其他的东西都运行正常,麻烦只在xsl模板中使用php函数。
@upd:在我的电脑上尝试了不同版本的php:5.3,5.4,5.5 - 结果是一样的。我有Mac OS X.