Сравните решение @ ricosrealm для пользователей XSLT2 с @ Dimitre для XSLT1 (и проверьте также количество строк в FXSL-trim).Функция замены регулярных выражений настолько проста, тратит меньше процессорного времени и меньше программистского времени.
Для пользователей XSLT1 в 2013 году
Если вы являетесь пользователем XSLT1, возможно, потому, что у вас нет выбораиспользовать XSLT2.Пример: PHP зависит от реализации LibXML2, которая остановлена в стандарте 1999 года, а не реализует стандарт 2007 года.Сегодня (2013) только небольшая часть пользователей XSLT1 делает это из соображений производительности.
Итак, , если вы предполагаете, что вы попали в ловушку XSLT1 и вашей платформы, пришло время узнать и использовать "зарегистрированные функции".", как в PHP (но любой другой, например, Python или Javascript, использующий LibXML2, может использовать LibXML2 ) для приближения к свободе / функциональности XSLT2.
См. XSLTProcessor:: registerPHPFunctions на вашем языке.
Пример PHP:
<xsl:value-of
select="php:functionString( 'trim', Datas/Data[@key='Name']/string )"
/>
ПРИМЕЧАНИЕ (отредактировано): для реализаций не-libXML2, как в средах Microsoft (.NET), как показано@ChristopheDebove (комментарии ниже), также есть решения для зарегистрированных функций.Конечно, для Java есть SAXON, единственный хороший открытый исходный код XSLT2 на сегодняшний день.
... Если однажды (см. Мнения о том, когда здесь и здесь ) вы заменяете XSLT1 на XSLT2 в той же самой структуре (например, PHP), вы ненеобходимо изменить сценарии XSLT, поскольку ожидается, что зарегистрированные функции будут такими же.