XSL - удалить неразрывный пробел - PullRequest
4 голосов
/ 12 апреля 2011

В моей реализации XSL (2.0) я пытался использовать приведенный ниже оператор для удаления всех пробелов и неразрывных пробелов в текстовом узле. Он работает только для пробелов, но не для неразрывных пробелов, коды ASCII которых                               ​  и т. Д. Я использую процессор SAXON для выполнения.

Текущий код XSL:

translate(normalize-space($text-nodes[1]),  ' ' , '' ))

Как я могу их удалить. Пожалуйста, поделитесь своими мыслями.

1 Ответ

8 голосов
/ 12 апреля 2011

Это коды Unicode, а не ASCII (по большей части), поэтому вам, вероятно, следует использовать функцию replace на regex , содержащую разделитель Unicode класс символов :

replace($text-nodes[1], '\p{Z}+', '')

Более подробно:

Регулярное выражение \p{Z}+ соответствует одному или нескольким символам в категории «разделитель» в Юникоде.\p{} - это escape-последовательность категории , которая соответствует одному символу в категории, указанной в фигурных скобках.Z определяет категорию «разделитель» (которая включает в себя различные виды пробелов).+ означает «соответствовать предыдущему регулярному выражению один или несколько раз».Функция replace возвращает версию своего первого аргумента, причем все неперекрывающиеся подстроки, совпадающие со вторым аргументом, заменяются его третьим аргументом.Таким образом, возвращается версия $text-nodes[1] со всеми последовательностями символов-разделителей, замененными пустой строкой, т.е. удаленными.

...