Подтвердить что ты не робот

Удаление символов с помощью xsl

Мне нужно удалить следующие символы из строкового значения, используя xsl 1.0

*, /, \, #, %, !, @, $, (, ), &

Я придумал следующее:

translate(translate(translate(string(//xpath/@value),'.',''),'/',''),',','')

В приведенном выше подходе мне придется дублировать один и тот же код много раз (один раз за символ).

Как я могу достичь той же цели, не дублируя код?

Спасибо: -)

4b9b3361

Ответ 1

Вам просто нужно translate(//foo/@value, '*\%[email protected]$&', '') в чистом XPath, соответственно, внутри документа XML, такого как таблица стилей XSLT, вам нужно избежать амперсанда <xsl:value-of select="translate(//foo/@value, '*\%[email protected]$&amp;', '')"/>.

Ответ 2

Функция translate() принимает в качестве второго и третьего аргументов две строки - не только два символа.

translate(., $string1, '')

создает строку, которая является строковым значением контекста (текущего) node, в котором удаляется любое появление символа, находящегося в $string1.

Поэтому вы можете использовать:

translate(expressionSelectingNode, "/\#%[email protected]$()&", "")

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

Конечно, если функция translate() используется в таблице стилей XSLT (или, как правило, в документе XML), некоторые специальные символы, такие как < и &, должны быть экранированы соответственно как &lt; и &amp;.

Используя это настолько мощно, что можно удалить набор неизвестных символов:

Представьте, что вы хотите удалить из любой строки все символы, которые не являются числовыми. Мы не знаем заранее, какие символы будут присутствовать в строке, поэтому мы не можем просто перечислить их во втором аргументе translate(). Однако мы все равно можем удалить все эти неизвестные атрибуты:

translate(., translate(., '0123456789', ''), '')

Внутренний translate() создает строку без каких-либо цифр.

Внешний translate() удаляет все эти нецифровые символы (найденные внутренним translate()) из исходной строки, поэтому остается только символ цифры.