gpt4 book ai didi

php - 如何使用 PHP 将 XPath 表达式作为 XSL 参数传递?

转载 作者:行者123 更新时间:2023-12-02 06:10:39 25 4
gpt4 key购买 nike

我有一个非常大的 XML 文件,我正在从中提取信息,并将其转换为不同的 XML 格式。我的转换本身运行得很好,所以现在我想通过使用 PHP 传递变量 select="" 标准来使其更加灵活。

以下是我正在使用的工作 XSLT 代码(为简单起见,已截断):

<xsl:param name="criteria" select="//Product[PublicationDate &gt; 20141231]" />
<xsl:template match="ONIXMessage">
<xsl:for-each select="$criteria">
<xsl:apply-templates select="Title"/>
</xsl:for-each>
</xsl:template>

$criteria 的值是一个 XPath 表达式,上面的操作没有问题。问题是当我尝试使用 PHP 将不同的值传递到 $criteria 时:

$proc = new XSLTProcessor;
$proc->importStyleSheet( $icml );
$proc->setParameter( "", "criteria", "//Product[Imprint = 'Nightwood']");

当我使用setParameter时,转换完全失败。我知道表达式本身是准确的,因为当我将它们直接输入 XSLT(不使用 PHP)时,转换工作正常。

据我了解,问题在于参数作为字符串而不是正确的 XPath 表达式传递,因此 XSLT 无法将 select="" 解析为节点集。那么我该如何防止这种情况发生呢?传递整个 XPath 表达式非常重要,这样我就可以将 for-each 标准更改为我想要的任何内容。

最佳答案

From what I understand, the problem is that the parameter is being passed as a string rather than as a proper XPath expression

这是一个正确的评估。您需要一个可以将字符串计算为 XPath 表达式的处理器。幸运的是,PHP 使用的 libxslt 处理器确实支持 EXSLT dyn:evaluate() extension function .

如果没有这个,您就必须将参数传递给另一个 XSLT 样式表,其功能是生成实际转换所需的 XSLT 样式表。

关于php - 如何使用 PHP 将 XPath 表达式作为 XSL 参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27774013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com