2011-04-12 94 views
4

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

当前XSL代码:

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

我怎么可以让他们删除。请分享你的想法。

回答

8

这些代码都是Unicode,而不是ASCII(在大多数情况下),所以你应该使用replace函数包含regex Unicode的分离character class

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

的详细信息:

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

+0

+1更正XPath/XSLT 2.0答案。 – 2011-04-12 20:36:08

+0

“[\ p {Z}] +”中的方括号是否必要?不应该'\ p {Z} +''足够吗? – 2011-04-13 10:44:01

+0

当我最初写我的答案时,我并不确定这一点,所以我把它们放在了安全的地方。我只是再次看了规范,你说得对,方括号是不必要的,所以我删除了它们。 – wdebeaum 2011-04-13 14:20:06