如何在 PHP 5 中启用 XSLT 函数? [英] How do I enable XSLT functions in PHP 5?

查看:25
本文介绍了如何在 PHP 5 中启用 XSLT 函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

<块引用>

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

我认为这意味着尚未启用 xslt 功能.如何在 PHP 中启用这些功能?是否有我需要包含的 php 文件(比如 Javascript 库的工作方式)还是更复杂的东西?我由 MediaTemple 托管.

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

 \n";打印 "

\n";打印 $result;打印 "</pre>\n";}别的 {打印抱歉,sample.xml 无法被sample.xsl 转换为";打印\$result 变量的原因是".xslt_error($xh) .打印 " 并且错误代码是 " .xslt_errno($xh);}xslt_free($xh);?>

提前致谢!

解决方案

你必须编译PHP 支持它并确保具有所有必需的依赖项.请参阅PHP XSLT 手册中的相应章节.

来自章节要求<块引用>

此扩展需要 libxml PHP 扩展.这意味着还需要传入 --enable-libxml,尽管这是隐式完成的,因为默认情况下启用了 libxml.这个扩展使用 Sablotron 和 expat,两者都可以在 » http://freshmeat.net/projects/sablotron/找到.提供二进制文件和源代码.在 PHP 4 中使用 --with-xslt 选项启用.

来自章节安装<块引用>

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

推荐的在 PHP5 中使用 XSL 转换的扩展是 XSL.如果您需要做的只是转换两个文档,如您的示例所示,请考虑 PHP 手册中的这个示例:

$xml = 新的 DOMDocument;$xml->load('collection.xml');$xsl = 新的 DOMDocument;$xsl->load('collection.xsl');//配置变压器$proc = 新的 XSLTProcessor;$proc->importStyleSheet($xsl);//附加 xsl 规则echo $proc->transformToXML($xml);

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

I'm wanting to print an xml file out as an HTML nested list using xslt, and as far as I know the code is correct, however I'm getting this error

Fatal error: Call to undefined function xslt_create()

Which I presume means the xslt functions havn't been enabled. How do I enable these functions within PHP? Is there a php file I need to include (like the way Javascript libraries work) or is it something more complicated? I'm hosted with MediaTemple.

Here's the php code I'm using:

        <?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); 

    ?>

Thanks in advance!

解决方案

You have to compile PHP with the support for it and make sure to have all the required dependencies. Please see the corresponding chapters in the PHP Manual for XSLT.

From chapter Requirements

This extension requires the libxml PHP extension. This means that passing in --enable-libxml is also required, although this is implicitly accomplished because libxml is enabled by default. This extension uses Sablotron and expat, which can both be found at » http://freshmeat.net/projects/sablotron/. Binaries are provided as well as source. Enable by using the --with-xslt option with PHP 4.

From chapter Installation

On Unix, run configure with the --enable-xslt --with-xslt-sablot options. The Sablotron library should be installed somewhere your compiler can find it. Make sure you have the same libraries linked to the Sablotron library as those, which are linked with PHP. The configuration options: --with-expat-dir=DIR --with-iconv-dir=DIR are there to help you specify them. When asking for support, always mention these directives, and whether there are other versions of those libraries installed on your system somewhere. Naturally, provide all the version numbers.

The recommended extension for using XSL transformations with PHP5 is XSL. If all you need to do is transform two documents, as show in your example, consider this example from the PHP Manual:

$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);

The transformToXML method will return the transformed document or FALSE, so you can keep the if/else from your code. In any case, it should be trivial to upgrade your code.

这篇关于如何在 PHP 5 中启用 XSLT 函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆