我将尽力在这里明确术语,术语的重载使这变得复杂。
我有一个转换,我传递一个属性来填充xsl:param,这是有效的
<xsl:param name="platform"/>
如果我使用,这将打印出来
<xsl:value-of select='$platform'/>
我不需要打印这个属性/ param,而是需要将它传递给一个函数。我试过了
<xsl:value-of select="replace(current(),'replaceMe','$platform')"/>
我收到错误
replace()中的替换字符串无效:$ sign必须后跟数字0-9
有没有办法将param传递给函数? 如果是这样,我该如何格式化呢?
你的意思是
<xsl:value-of select="replace(current(), 'replaceMe', $platform)" />
$platform
是一个变量。"$platform"
在replace()
函数的上下文中是一个无效的替换字符串,works with regex并且当它看到back-refereces时,期望$1
像替换字符串中的$2
或$
。逻辑结论:一旦$platform
变量意外地包含$
,您将再次看到相同的错误,并且当'replaceMe'
意外地是无效的正则表达式时,您将再次看到错误。如果它恰好是有效的正则表达式并且您不知道它,您可能会看到其他意外行为。
因此 - 如果你想用变量逐字搜索和替换 - 你必须正确地regex-escape搜索模式中的所有特殊字符,并至少转义替换字符串中的任何$
和\
。强大的“逐字”替换调用如下所示:
replace(
$subject,
replace($searchString, '[.\[\]\\|^$?*+{}()-]','\\$0'),
replace($replacement, '[\\$]', '\\$0')
)