티스토리 뷰

XML Developer/XSL

XSLT <for-each>

미니~ 2011. 11. 30. 08:30
반응형
지난번에 <xsl:value-of>를 살펴봤습니다.
XML 문서에서 하나의 값을 가져올 때 value-of를 사용하면 되는데요..
 
반복적으로 나타나는 엘리먼트를 처리할 때는 어떻게 해야 할까요?
바로 <xsl:for-each>를 활용해서 루프를 돌면서 처리하면 됩니다.
 
그럼.. for-each의 사용법을 살펴보도록 하지요..
 
<xsl:for-each> 엘리먼트
 
<xsl:for-each> 엘리먼트를 사용하면 XPath 형식으로 지정된 모든 XML 엘리먼트에 대해
값을 가져와서 처리할 수 있습니다.
 
말로 계속 설명하는 것보다 먼저 소스를 살펴보시죠..


이전 value-of의 예제와 거의 비슷합니다.
다만, 14, 19번째 줄에 <xsl:for-each> 구문이 포함된 것을 알 수 있습니다.
 
<xsl:for-each>는 루프를 처리하는 것이기 때문에 내부의 <tr>...</tr> 부분이 반복되는 것임을 쉽게 이해할 수 있겠죠.. ^^
<xsl:for-each>의 속성으로 select가 들어가 있는데요.. value-of와 마찬가지로 XPath 표현식을 사용하고 있습니다.
 
XPath에 대한 자세한 강좌는 XSLT이 끝나는대로 이어서 하려고 합니다.


 
결과를 확인해 보면  다음과 같이 나타납니다.

My CD Collection

TitleArtist
Empire Burlesque Bob Dylan
Hide your heart Bonnie Tyler
Greatest Hits Dolly Parton
Still got the blues Gary More
Eros Eros Ramazzotti
One night only Bee Gees
Sylvias Mother Dr.Hook
Maggie May Rod Stewart
Romanza Andrea Bocelli
When a man loves a woman Percy Sledge
Black angel Savage Rose
1999 Grammy Nominees Many
For the good times Kenny Rogers
Big Willie style Will Smith
Tupelo Honey Van Morrison
Soulsville Jorn Hoel
The very best of Cat Stevens
Stop Sam Brown
Bridge of Spies T`Pau
Private Dancer Tina Turner
Midt om natten Kim Larsen
Pavarotti Gala Concert Luciano Pavarotti
The dock of the bay Otis Redding
Picture book Simply Red
Red The Communards
Unchain my heart Joe Cocker
XML 파일 보기XSL 파일 보기결과 보기
 
결과 필터링
 
위 예제에서는 catalog 하위의 모든 cd의 내용을 보여주고 있습니다.
for-each를 이용해 루프를 처리하더라도 이 중에 일부만 필터링해서 보여주고 싶을 경우도 있을 겁니다.
 
이럴 때 사용하는 방법을 잠깐 살펴보도록 하지요..
 
select 속성에서 XPath를 다음과 같은 형태로 사용하면 루프를 처리하는 범위를 제한할 수 있습니다.
 
<xsl:for-each select="catalog/cd[artist='Bob Dylan']">
 
기존에는 어떻게 썼는지 비교해 보도록 하죠..
 
<xsl:for-each select="catalog/cd">
 
[....] 이 부분이 추가된 겁니다. 그쵸..이것이 바로 필터라고 생각하면 됩니다.
내부 내용을 살펴보면 artist가 'Bob Dylan'인 cd만 가져와서 루프를 처리하라는 것으로 이해할 수 있을 겁니다.
 
여기에서는 = 연산자를 통해서 일치하는 것을 가져오도록 했는데요..
기본적으로 사용할 수 있는 연산자를 잠깐 설명하도록 하죠..
 
A = B (A와 B가 일치하는 것)
A != B (A와 B가 일치하지 않는 것)
A &lt; B (A가 B보다 작은 것)
A &gt; B (A가 B보다 큰 것)
 
< (작다), > (크다)와 같은 연산자를 사용하지 않는 것은 태그의 표시인 꺽쇠와 충돌이 나기 때문입니다.
그래서 &lt; &gt;를 사용하는 것이죠..


 
그럼.. 위 예가 적용된 스타일시트를 살펴볼까요?


결과는 다음과 같이 나타납니다.

My CD Collection

TitleArtist
Empire Burlesque Bob Dylan
어느덧 XSL 강좌가 중반으로 들어서고 있습니다. 그래도 내용이 쉬워서 모두들 따라오시기에는 어려움이 없을 거라고 생각합니다.
w3school의 내용이 쉽게 잘 정리되어 있는 것 같습니다.
 
그럼.. 좋은 하루 되세요~~
반응형

'XML Developer > XSL' 카테고리의 다른 글

XSLT <value-of>  (0) 2011.11.25
XSLT <template>  (0) 2011.11.21
XSLT 변환(Transform)  (0) 2011.11.16
XSLT 소개  (0) 2011.11.10
XSL에 대하여  (0) 2011.11.08
TAG
, , ,
댓글
댓글쓰기 폼