2011-04-12 4 views
4

내 XSL 구현 (2.0)에서 아래 문을 사용하여 모든 공백을 제거하려고 시도했습니다. & 텍스트 노드 내에서 공백을 구분하지 마십시오. 공백 만 사용할 수 있지만 ASCII 코드가                               ​  등인 비 분리 공백에는 사용할 수 없습니다. 실행을 위해 SAXON 프로세서를 사용하고 있습니다.XSL - 비 분리 공백 제거

현재 XSL 코드 : 그들을 제거 내가 한 수있는 방법

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

. 생각을 공유하십시오.

답변

8

그 코드는 유니 코드 (대부분의 경우)하지 ASCII, 그래서 당신은 아마 regex 유니 코드 분리 character class 포함으로 replace 기능을 사용해야합니다

: 구체적으로

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

을 정규식 \p{Z}+은 유니 코드의 "구분 기호"범주에있는 하나 이상의 문자와 일치합니다. \p{}은 중괄호 안에 지정된 범주의 단일 문자와 일치하는 category escape 시퀀스입니다. Z은 "구분 기호"범주 (다양한 종류의 공백 포함)를 지정합니다. +은 "이전 정규 표현식을 한 번 이상 일치"를 의미합니다. replace 함수는 두 번째 인수와 일치하는 모든 겹치지 않는 부분 문자열을 세 번째 인수로 바꿔서 첫 번째 인수의 버전을 반환합니다. 따라서이 연산자는 빈 문자열 (예 : 제거됨)로 대체 된 모든 구분 기호 문자 시퀀스로 $text-nodes[1] 버전을 반환합니다.

+0

+1 XPath/XSLT 2.0 정답을 수정하십시오. –

+0

'[\ p {Z}] + ''의 대괄호가 필요합니까? ''\ p {Z} + ''로 충분하지 않아야합니까? –

+0

원래 대답을 적었을 때 그 점에 대해 확신 할 수 없었기 때문에 나는 그들을 안전하다고 생각했습니다. 방금 스펙을 다시 보았습니다. 당신 말이 맞습니다. 대괄호는 불필요하므로 제거했습니다. – wdebeaum