首页 > 解决方案 > 以 xsl 参数为参数的 XSL 函数

问题描述

我会尽量在这里保持术语清晰,术语的重载使这变得复杂。

我有一个转换,我正在传递一个属性来填充 xsl:param,这是有效的

<xsl:param name="platform"/>

如果我使用,这将打印出来

<xsl:value-of select='$platform'/>

我需要将其传递给函数,而不是打印此属性/参数。我努力了

<xsl:value-of select="replace(current(),'replaceMe','$platform')"/>

我收到错误

replace() 中的替换字符串无效:$ 符号后必须跟数字 0-9

有没有办法可以将参数传递给函数?
如果是这样,我需要如何格式化它?

标签: xsltxslt-2.0

解决方案


你的意思是

<xsl:value-of select="replace(current(), 'replaceMe', $platform)" />
  • $platform是一个变量。

  • "$platform"replace()函数上下文中的无效替换字符串,它正则表达式一起使用,并在看到.$1$2$


逻辑结论:一旦$platform变量意外包含 a ,您将再次看到相同的错误,而意外包含无效的正则表达式$时会出现另一个错误。'replaceMe'如果它恰好是一个有效的正则表达式并且您不知道它,您可能会看到其他意外行为。

因此 - 如果你想用变量进行逐字搜索和替换 - 你必须正确地对搜索模式中的所有特殊字符进行正则表达式转义,并且至少在替换字符串中转义任何$和。\一个健壮的“逐字”替换调用如下所示:

replace(
  $subject,
  replace($searchString, '[.\[\]\\|^$?*+{}()-]','\\$0'),
  replace($replacement, '[\\$]', '\\$0')
)

推荐阅读