【问题标题】:XSL transformation in php5 WITHOUT the XSL extension enabled未启用 XSL 扩展的 php5 中的 XSL 转换
【发布时间】:2011-02-24 13:04:09
【问题描述】:

我遇到了一个愚蠢的情况...我必须让一个执行 XSLT 转换的应用程序在机构服务器上运行,并且该服务器配置了 php5,但未启用 XSL... 不幸的是,更改托管解决方案不是一种选择,负责服务器的 IT 人员不愿意重新配置它并启用 XSL。

所以这是我的假问题:是否可以在不启用 XSL 的情况下执行 XSL 转换? (准确地说,我需要用 XSL 文件转换 XML 字符串,如果重要的话) 我检查了 DOM,但这些示例使用的类在我的实际脚本 (XSLTProcessor) 中引发了致命错误。

任何建议将不胜感激。

【问题讨论】:

  • 那么,问题是如何在没有 XSLT 处理器的情况下执行转换? (!)

标签: php xslt


【解决方案1】:

有一些处理 XML/XSLT 的 PEAR 包。不过,我对其中任何一个都没有任何亲身经历。

http://pear.php.net/packages.php?catpid=22&catname=XML

注意获取pear包不需要安装pear,可以手动下载。

【讨论】:

  • 虽然许多(可能是大多数)PEAR 包在下载和解压后就可以正常工作,但有些需要安装程序进行替换,例如包含路径,所以 YMMV。
  • 感谢您的提示!不幸的是,在这种情况下,这些包看起来不合适,但我会记住 PEAR!
【解决方案2】:

我从未听说过 XSLT 处理器的 PHP 实现。如果存在的话,它可能会很复杂、有漏洞并且很可能无人维护。

您应该考虑替代解决方案,例如使用远程服务器,其工作是执行转换(如果这适用于您的情况)或者可能使用exec() 来运行命令行处理器,如果这样的事情是可能的.

根据转换的复杂性,您最好在 PHP 中使用SimpleXML 执行它。我不是在谈论在这里制作 XSLT 处理器,那太疯狂了,而不是使用类似的东西

<xsl:for-each select="/foo/bar">
    <xsl:value-of select="@baz" />
</xsl:for-each>

你可以使用

foreach ($foo->bar as $bar) {
    echo $bar['baz'];
}

当然,如果您的样式表非常基本/简单,这只是一个现实的解决方案。

【讨论】:

  • 谢谢乔希!不幸的是,XSL 过于复杂,无法合理地使用 SimpleXML。虽然,基本的 exec() 解决方案似乎可行。
猜你喜欢
  • 2012-05-24
  • 2015-03-07
  • 2012-04-28
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
相关资源
最近更新 更多