0

我有一个带有以下标题的 XSLT 样式表

  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:lxslt="http://xml.apache.org/xslt"
    xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
    extension-element-prefixes="redirect"
   xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:my-ext="ext1">

我也有自定义功能:

<msxsl:script language="JavaScript" implements-prefix="my-ext">

    var lineCounter = 0;
    var totalPages = 0;
    var currentPage = 1;
    var currentObject = '';
    var colSpan = 0;

    function getLineCounter()
    {
        return lineCounter;
    }

    function updateLineCounter(aValue)
    {
        lineCounter += aValue;
         return '';
    }

我的自定义函数在我的 xsl 中使用。当我从命令行使用此 XSL 转换我的 XML 时,使用msxsl.exe它可以完美运行并生成完美的 HTML。

好的,这是我的问题:我正在尝试使用 PHP 在服务器上执行转换并发送回结果。我以前多次使用过这个程序,没有问题;但是,这是我第一次尝试使用 MSXSL 扩展和功能。

示例错误如下所示:

Warning: XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: xmlXPathCompOpEval: **function resetAll not found** in D:\Development\AppServ\www\RJFWEB\jqueryFileTree\PHPMain.php on line 49

Warning: XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: **Unregistered function** in D:\Development\AppServ\www\RJFWEB\jqueryFileTree\PHPMain.php on line 49

我们可以看到没有找到/理解函数——尽管这是我在命令行中使用msXSL.exe 运行的相同代码。

所以,最终我试图找出是否需要在我的 PHP.ini 中修复/添加一些东西以了解如何使用 MS 扩展或者我是否需要更改 XSL 样式表?

伙计……我希望这个问题有意义!任何帮助表示赞赏。谢谢。

我的 phpInfo 显示

**XSL**
XSL                                      enabled
libxslt Version                              1.1.23
libxslt compiled against libxml Version      2.6.32
EXSLT                                    enabled
libexslt Version                             0.8.13
4

1 回答 1

1

msxsl:script是一个专有扩展,允许您使用 JScript 或 VBScript 编写扩展函数,我认为 libxslt 不支持。但是,使用 PHP 5 和 libxslt,您可以在 PHP 中编写扩展函数,请参阅http://php.net/manual/en/xsltprocessor.registerphpfunctions.php。所以这似乎是要走的路,如果你不能使用纯 XSLT 来实现你的要求,那么你需要将用 J(ava)Script 编写的函数移植到 PHP 并利用http://php.net /manual/en/xsltprocessor.registerphpfunctions.php在 XSLT 中使用这些函数。

作为替代方案,如果您在有 MSXML 可用的 Windows 上运行 PHP,您可能想尝试从 PHP 中使用它,应该可以在http://www.php.net/manual/en/的帮助下使用例如, class.com.phpnew COM("MSXML2.DomDocument.3.0")应该为您提供一个 MSXML DOM 文档,其中包含transformNode使用msxsl:script.

于 2012-10-10T12:03:18.710 回答