XSL以xsl param作为参数运行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XSL以xsl param作为参数运行相关的知识,希望对你有一定的参考价值。

我将尽力在这里明确术语,术语的重载使这变得复杂。

我有一个转换,我传递一个属性来填充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')
)

以上是关于XSL以xsl param作为参数运行的主要内容,如果未能解决你的问题,请参考以下文章

Saxon-js 是不是对 xsl:param 执行 XML 语法检查?

将 xsl:apply-templates 转换为字符串值以用作 if 参数

Saxon-HE Java 扩展 - 如何访问作为参数传递的 xsl 变量的值?

vue axios导出xsl文件(二进制)

愚蠢且可能很简单的 XSL 问题

xsl 列出以 MyFile 开头的目录中的文件