xmlXPathCompOpEval:找不到函数函数

时间:2016-01-12 16:25:24

标签: php function xslt

我收到错误:

  

警告: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.

0 个答案:

没有答案