2011-04-12 47 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