Xslt XSL-删除不间断空格
在我的XSL实现(2.0)中,我尝试使用下面的语句删除文本节点中的所有空格&非中断空格。它仅适用于空格,但不适用于ASCII码为、Xslt XSL-删除不间断空格,xslt,xslt-2.0,xslt-1.0,Xslt,Xslt 2.0,Xslt 1.0,在我的XSL实现(2.0)中,我尝试使用下面的语句删除文本节点中的所有空格&非中断空格。它仅适用于空格,但不适用于ASCII码为、 的非中断空格 等等。我正在使用SAXON处理器执行 当前XSL代码: translate(normalize-space($text-nodes[
的非中断空格 代码>等等。我正在使用SAXON处理器执行
当前XSL代码:
translate(normalize-space($text-nodes[1]), ' ' , '' ))
我怎样才能把它们去掉。请分享你的想法 这些代码是Unicode,而不是ASCII(在大多数情况下),因此您可能应该使用包含Unicode分隔符的函数:
更详细地说:
regex\p{Z}+
匹配Unicode中“分隔符”类别中的一个或多个字符\p{}
是序列,它匹配大括号内指定类别中的单个字符Z
指定“分隔符”类别(包括各种类型的空白)<代码>+
表示“将前面的正则表达式匹配一次或多次”。replace
函数返回其第一个参数的版本,其中所有不重叠的子字符串与其第二个参数匹配,并替换为第三个参数。因此,这将返回一个版本的$text nodes[1]
,其中所有分隔符序列都替换为空字符串,即被删除。是否需要'[\p{Z}]+'
中的方括号?难道'\p{Z}+'
就足够了吗?我最初写答案时不确定这一点,所以为了安全起见,我把它们放进去了。我刚刚又看了一遍规范,你是对的,方括号是不必要的,所以我把它们删除了。@wdebeaum:你能解释一下这个正则表达式吗?@Rachel:看我的编辑。另外,现在我想起来了,+
是没有必要的,但我把它留了下来,因为它有教育价值。我不知道,这可能会使它的效率稍微提高一点。上面提到的正则表达式在使用指定字符时工作得很好。我还遇到了一些特殊字符,它们显示为空格或空,这些字符属于不同的unicode类别。上述类别中很少有字符显示为空格或空白。我如何忽略以上家族中的这些字符,这些字符显示为空格或空白?
replace($text-nodes[1], '\p{Z}+', '')