XSL - 删除不间断的空间

Rac*_*hel 4 xslt xslt-2.0 xslt-1.0

在我的XSL实现(2.0)中,我尝试使用下面的语句来删除文本节点中的所有空格和非空格.它仅适用于空间,但不适用于ASCII代码                              ​ 等的非破坏空间.我使用SAXON处理器执行.

当前的XSL代码:

translate(normalize-space($text-nodes[1]),  ' ' , '' ))
Run Code Online (Sandbox Code Playgroud)

我怎样才能删除它们.请分享你的想法.

wde*_*aum 8

这些代码是Unicode,而不是ASCII(大多数情况下),因此您应该将replace函数与包含Unicode分隔符字符类正则表达式一起使用:

replace($text-nodes[1], '\p{Z}+', '')
Run Code Online (Sandbox Code Playgroud)

更详细:

正则表达式\p{Z}+匹配Unicode中"分隔符"类别中的一个或多个字符.\p{}类别转义序列,它匹配花括号内指定的类别中的单个字符.Z指定"分隔符"类别(包括各种空格).+表示"匹配前面的正则表达式一次或多次".该replace函数返回其第一个参数的版本,其中所有非重叠的子字符串与其第二个参数匹配,并替换为其第三个参数.因此,这将返回一个版本,$text-nodes[1]其中所有分隔符字符序列都替换为空字符串,即已删除.