노드의 처리
노드의 반복 처리
<xsl:for-each>요소는 선택된 각 노드에 반복해서 템플릿을 적용해 줍니다.
이 요소는 select 속성으로 전달받은 XPath 표현식에 따라 선택된 노드의 개수만큼 반복해서 템플릿을 적용합니다.
다음 예제는 <programming_languages>요소의 자식 요소인 <language>요소의 개수만큼 반복해서 템플릿을 적용하는 예제입니다.
예제
<xsl:for-each select="programming_languages/language">
...
</xsl:for-each>
노드의 값 출력
<xsl:value-of>요소는 선택된 노드에서 데이터를 추출해 줍니다.
이 요소는 select 속성으로 전달받은 XPath 표현식에 따라 선택된 노드의 값을 텍스트로 추출하여 해당 위치에 삽입합니다.
다음 예제는 <name>요소의 값을 추출하여 텍스트로 삽입하는 예제입니다.
예제
<xsl:value-of select="name"/>
노드의 정렬
<xsl:sort>요소는 노드들의 정렬 기준을 명시할 때 사용합니다.
<xsl:sort>요소를 작성하는 문법은 다음과 같습니다.
문법
<xsl:sort
select = string-expression
lang = { nmtoken }
data-type = { "text" | "number" | qname-but-not-ncname }
order = { "ascending" | "descending" }
case-order = { "upper-first" | "lower-first" } />
- select : 노드를 정렬하기 위해 기준이 되는 키(key)를 명시합니다.
- lang : 정렬 순서를 결정하는데 사용되는 영문자를 명시합니다.
- data-type : 텍스트의 타입을 명시합니다.
- order : 정렬 순서를 명시하며, 기본 설정값은 오름차순(ascending)입니다.
- case-order : 대소문자에 의한 문자열의 정렬 순서를 명시하며, 기본 설정값은 대문자가 먼저(upper-first)입니다.
다음 예제는 <name>요소의 텍스트 값을 비교하여 오름차순으로 정렬하는 예제입니다.
xml_xslt_03.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body>
<h2 style="text-align:center">이름에 따른 오름차순 정렬</h2>
<xsl:for-each select="programming_languages/language">
<xsl:sort select="name" data-type="text" order="ascending"/>
<xsl:value-of select="name"/><br/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
이번 수업의 예제에서 사용되는 xml_xslt_03.xml 파일의 코드는 다음과 같습니다.
다음은 위의 xml_xslt_03.xml 파일을 실행한 결과입니다.
노드의 조건부 처리
<xsl:if>요소는 노드의 값이 특정 조건에 해당할 때만 동작합니다.
이 요소는 test 속성으로 전달받은 표현식이 참인 경우에만 실행됩니다.
다음 예제는 버전이 5 이상인 언어만을 출력하는 예제입니다.
xml_xslt_04.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body>
<h2 style="text-align:center">버전이 5.0 이상인 언어</h2>
<xsl:for-each select="programming_languages/language">
<xsl:if test="version > 5">
<xsl:value-of select="name"/> : ver.
<xsl:value-of select="version"/><br/>
</xsl:if>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
이번 수업의 예제에서 사용되는 xml_xslt_04.xml 파일의 코드는 다음과 같습니다.
다음은 위의 xml_xslt_04.xml 파일을 실행한 결과입니다.
노드의 다중 조건부 처리
<xsl:choose>요소는 <xsl:when>과 <xsl:otherwise>요소와 함께 다중 조건문을 작성할 때 사용합니다.
<xsl:when>요소는 test 속성으로 전달받은 표현식이 참인 경우에만 실행됩니다.
전달받은 표현식이 거짓인 경우에는 <xsl:when>요소는 실행되지 않으며, 대신에 <xsl:otherwise>요소가 실행됩니다.
다음 예제는 <priority>요소의 rating 속성값이 2 이상인 경우와 그렇지 않은 경우에 다른 텍스트를 출력해 주는 예제입니다.
xml_xslt_05.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body>
<h2 style="text-align:center">노드의 다중 조건부 처리</h2>
<xsl:for-each select="programming_languages/language">
<xsl:choose>
<xsl:when test="priority[@rating > 2]">
<xsl:value-of select="name"/> : 나중에 꼭 공부해요!<br/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="name"/> : 우선은 이 과목부터 공부하죠!<br/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
이번 수업의 예제에서 사용되는 xml_xslt_05.xml 파일의 코드는 다음과 같습니다.
다음은 위의 xml_xslt_05.xml 파일을 실행한 결과입니다.