Remark : normalize-space
|
1 2 3 |
<xsl:value-of select="normalize-space(.)" /> |
normalize-space()는 XSLT/XPath에서 문자열의 앞뒤 공백을 제거하고, 중간의 연속된 공백을 하나의 공백으로 변환하는 함수입니다.
기본 문법
|
1 2 3 |
normalize-space(문자열) |
또는 현재 노드에 대해
|
1 2 3 |
normalize-space() |
1. 앞뒤 공백 제거
XML
|
1 2 3 |
<Name> John Smith </Name> |
XSLT
|
1 2 3 |
<xsl:value-of select="normalize-space(Name)"/> |
결과
|
1 2 3 |
John Smith |
2. 연속된 공백을 하나로 변경
XML
|
1 2 3 |
<Name>John Smith Kim</Name> |
XSLT
|
1 2 3 |
<xsl:value-of select="normalize-space(Name)"/> |
결과
|
1 2 3 |
John Smith Kim |
3. 값이 있는지 확인 (가장 많이 사용)
|
1 2 3 4 5 |
<xsl:if test="normalize-space(Destination) != ''"> ... </xsl:if> |
다음과 같은 경우 모두 false입니다.
|
1 2 3 4 5 6 7 8 9 10 |
<Destination></Destination> <Destination> </Destination> <Destination> </Destination> |
즉 공백만 있어도 빈 문자열로 취급합니다.
4. 요소가 존재하는지만 확인
|
1 2 3 |
<xsl:if test="Destination"> |
이 경우는
|
1 2 3 |
<Destination></Destination> |
처럼 내용이 없어도 true입니다.
따라서
|
1 2 3 |
Destination |
과
|
1 2 3 |
normalize-space(Destination) |
은 의미가 다릅니다.
5. 속성에도 사용 가능
|
1 2 3 4 5 |
<Destination CityNameEng=" Seoul "/> <xsl:value-of select="normalize-space(Destination/@CityNameEng)"/> |
결과
|
1 2 3 |
Seoul |
6. 두 값이 모두 있을 때만 “/” 출력
|
1 2 3 4 5 6 7 |
<xsl:if test="normalize-space(Destination/@CityNameEng) != '' and normalize-space(Destination) != ''"> <xsl:value-of select="normalize-space(Destination/@CityNameEng)"/> / <xsl:value-of select="normalize-space(Destination)"/> </xsl:if> |
결과
둘 다 있을 때
|
1 2 3 |
Seoul/서울 |
영문만 있을 때
|
1 2 3 |
Seoul |
한글만 있을 때
|
1 2 3 |
서울 |
둘 다 없을 때
아무것도 출력되지 않습니다.
실무에서 가장 많이 사용하는 패턴
|
1 2 3 4 5 6 7 8 9 10 |
<!-- 값이 있는지 확인 --> normalize-space(Node) != '' <!-- 속성 값 확인 --> normalize-space(@Attr) != '' <!-- 출력 시 공백 제거 --> <xsl:value-of select="normalize-space(Node)"/> |