PHP和XSLT:扩展处理器

3
我需要在PHP中使用自己的标签和函数扩展XSLT处理器。我发现了一些API,但这些API仍不符合我的需求。
1) http://php.net/manual/ru/book.xsl.php - 这是相当简单的API,但我只能扩展函数(registerPHPFunctions),而不能扩展标签。
2) http://www.php.net/manual/en/ref.xslt.php - 很好很简单,我可以扩展任何我需要的东西(xslt_set_sax_handlers),但是,又来了一个问题。介绍(http://www.php.net/manual/en/intro.xslt.php)说:“此扩展已移至»PECL存储库,并且自PHP 5.0.0以来不再与PHP捆绑。”。好吧,我导航到pecl.php.net->搜索包->XSLT->未找到结果->o_O

看起来好的API已经被弃用了,而不好的API不能满足我的需求。你们能推荐什么吗?我需要一个PHP XSLT处理器,我可以扩展或覆盖所有可扩展或覆盖的内容,就像上面的“2)”一样。谢谢!


最好您说一下您想要实现什么。我猜您想要添加扩展元素到XSLT,但是具体为什么呢? - barefootliam
是的,我也有兴趣听取您的功能需求。 PHP具有相当多的漂亮的XML解析功能,以补充通常的SAX / DOM / XSL功能。 除非您的解决方案绝对必须是XSL,否则您可能会发现所需的内容已经存在。 - Mike Girard
大家好。我正在编写我的网站引擎的新版本。引擎的本质是XSLT处理器+标签/函数扩展+透明数据绑定(如MySQL)。因此,我需要一种方法来为几个XML标签编写自定义PHP处理程序。目前,我使用正则表达式替换来实现自定义XML标签行为,但它存在一系列问题。例如-嵌套结构处理。 - nyan-cat
可能是将PHP XSLT处理器升级到XSLT 2.0的重复问题。 - Paul Sweatte
1个回答

0

PHP使用libxslt作为其默认处理器,以及libexslt作为其扩展处理器。以下是API文档:

此外,libxslt已经支持了一个eval扩展, 可以满足您的需求。

还有内置的宏可通过xsl:processing-instruction使用,这些宏与PHP的简写分隔符匹配:

还有registerPHPFunctions方法。

转换可以将XPath表达式作为参数传递给自定义命名空间中的函数:

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:js="urn:livescript"
  extension-element-prefixes="js"
>

  <xsl:variable name="source" select="//"/>

  <xsl:template match="json">
    <xsl:value-of select="livescript:JSON($source)"/>
  </xsl:template>
</xsl:stylesheet>

该函数链接到一个外部转换,该转换计算XPath结果并使用回调返回结果。

参考资料


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接