Функции XSL с параметром xsl в качестве параметров - PullRequest
0 голосов
/ 17 мая 2018

Я постараюсь сохранить терминологию здесь ясной, перегрузка терминов усложняет задачу.

У меня есть преобразование, которое я передаю атрибут для заполнения xsl: param, это работает

<xsl:param name="platform"/>

Это напечатает, если я использую

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

Вместо того, чтобы печатать этот атрибут / параметр, мне нужно передать его функции.Я пытался

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

Я получаю сообщение об ошибке

Неверная строка замены в replace (): после знака $ должна следовать цифра 0-9

Есть ли способ передать параметр в функцию?
Если да, то как мне отформатировать его?

1 Ответ

0 голосов
/ 17 мая 2018

Вы имеете в виду

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

Логический вывод: вы снова увидите ту же ошибку, как только переменная $platform случайно содержит $, и еще одна ошибка, когда 'replaceMe' случайно является недопустимым регулярным выражением. Если это допустимое регулярное выражение и вы его не знаете, вы можете увидеть другое неожиданное поведение.

Поэтому - если вы хотите дословно выполнять поиск и замену переменных - вы должны правильно экранировать все специальные символы в шаблоне поиска и, по крайней мере, экранировать любые $ и \ в строке замены. Надежный «дословный» вызов замены выглядит так:

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