Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt XSL-删除不间断空格_Xslt_Xslt 2.0_Xslt 1.0 - Fatal编程技术网

Xslt XSL-删除不间断空格

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[

在我的XSL实现(2.0)中,我尝试使用下面的语句删除文本节点中的所有空格&非中断空格。它仅适用于空格,但不适用于ASCII码为、
 的非中断空格              ​等等。我正在使用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}+', '')