如何在PHP 5中启用XSLT功能?

时间:2010-12-15 14:38:41

标签: php xml xslt mediatemple

我想使用xslt将xml文件打印为HTML嵌套列表,据我所知,代码是正确的,但是我收到此错误

  

致命错误:调用未定义的函数xslt_create()

我认为这意味着xslt功能尚未启用。如何在PHP中启用这些功能?我需要包含一个php文件(就像Javascript库的工作方式)还是更复杂的东西?我接受了MediaTemple。

这是我正在使用的PHP代码:

        <?php 

    // Allocate a new XSLT processor 
    $xh = xslt_create(); 

    // Process the document, returning the result into the $result variable 
    $result = xslt_process($xh, 'armstrong.xml', 'familyToNestedList.xsl'); 
    if ($result) { 
        print "SUCCESS, sample.xml was transformed by sample.xsl into the \$result"; 
        print " variable, the \$result variable has the following contents\n<br>\n"; 
        print "<pre>\n"; 
        print $result; 
        print "</pre>\n"; 
    } 
    else { 
        print "Sorry, sample.xml could not be transformed by sample.xsl into"; 
        print "  the \$result variable the reason is that " . xslt_error($xh) .  
        print " and the error code is " . xslt_errno($xh); 
    } 

    xslt_free($xh); 

    ?>

提前致谢!

3 个答案:

答案 0 :(得分:16)

根据您的Linux发行版,您可以只安装php5-xsl模块,将“extension = php_xsl.so”行添加到您的php.ini文件中,然后重新启动您的apache2服务器。

这在Ubuntu 11.10上对我有用。您可以在命令行中输入“sudo apt-get install php5-xsl”来安装php5-xml。

答案 1 :(得分:7)

您必须compile PHP支持它,并确保拥有所有必需的依赖项。请参阅PHP Manual for XSLT中的相应章节。

从章Requirements

  

此扩展需要libxml PHP扩展。这意味着也需要传入--enable-libxml,尽管这是隐式实现的,因为默认情况下启用了libxml。此扩展程序使用Sablotron和expat,它们都可以在»http://freshmeat.net/projects/sablotron/找到。提供二进制文件以及源代码。通过在PHP 4中使用--with-xslt选项启用。

从章Installation

  

在Unix上,使用--enable-xslt --with-xslt-sablot选项运行configure。 Sablotron库应安装在您的编译器可以找到的地方。确保链接到Sablotron库的库与那些与PHP链接的库相同。配置选项: - with-expat-dir = DIR --with-iconv-dir = DIR可以帮助您指定它们。在寻求支持时,请始终提及这些指令,以及您的系统上是否安装了其他版本的库。当然,提供所有版本号。

recommended extension for using XSL transformations with PHP5 is XSL。如果你需要做的就是转换两个文档,如你的例子中所示,请考虑PHP手册中的这个例子:

$xml = new DOMDocument;
$xml->load('collection.xml');

$xsl = new DOMDocument;
$xsl->load('collection.xsl');

// Configure the transformer
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); // attach the xsl rules

echo $proc->transformToXML($xml);

transformToXML方法将返回已转换的文档或FALSE,因此您可以保留代码中的if / else。无论如何,升级你的代码应该是微不足道的。

答案 2 :(得分:2)

嗯,非常简单,但在php.net上可以更明确地解释它。

我正在使用一个包含ubuntu base并使用php-fpm的docker容器。

在我的上下文中安装此扩展程序的步骤是:

首先在linux存储库中搜索xsl扩展名 apt-cache search xsl

我最终找到了php5-xsl,所以它只是安装 apt-get install php5-xsl

安装过程已经添加了安装配置,如果没有发生,只需自己动手 vim /etc/php5/mods-available/xsl.ini

插入此内容: 延长= xsl.so

(显然路径是根据您的php配置设置,但我的示例是默认配置)

重启你的php fpm并完成!