XSLT

W3C/XML 2006. 12. 12. 18:20
XML 문서에 XSL 스타일 적용

@ book.xml
<?xml version="1.0" encoding="UTF-8" ?>
<책목록>
  <책>
       <제목>vb와 asp를 이용한 XML 프로그래밍</제목>
       <저자>Mark Wilson, Tracey wilson</저자>
       <국가>USA</국가>
       <출판사>이한 출판사</출판사>
       <가격>18,000</가격>
       <출판년도>1998</출판년도>
  </책>
  <책>
       <제목>인터넷 마크업 언어(XML)</제목>
       <저자>정회경</저자>
       <국가>한국</국가>
       <출판사>배재 출판사</출판사>
       <가격>5,000</가격>
       <출판년도>2000</출판년도>
  </책>
  <책>
       <제목>XML by Example</제목>
       <저자>Benoit Marchal</저자>
       <국가>미국</국가>
       <출판사>이한 디지털리</출판사>
       <가격>25,000</가격>
       <출판년도>2001</출판년도>
  </책>
  <책>
       <제목>비주얼 베이직</제목>
       <저자>홍길동</저자>
       <국가>한국</국가>
       <출판사>대림 출판사</출판사>
       <가격>28,000</가격>
       <출판년도>2000</출판년도>
  </책>
</책목록>

XSL을 적용하고 HTML 문서로 변환하여 브라우저로 보여주기 위해 HTML 태그를 사용

@ book.xsl
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
  <html>
  <body>
       <h2>나의 컴퓨터 서적 목록</h2>
       <table border="1">
       <tr bgcolor="#9acd32">
       <th align="left">제목</th>
       <th align="left">저자</th>
       </tr>
  <xsl:for-each select="책목록/책">
       <tr>
       <td><xsl:value-of select="제목"/></td>
       <td><xsl:value-of select="저자"/></td>
       </tr>
  </xsl:for-each>
       </table>
  </body>
  </html>
  </xsl:template>
</xsl:stylesheet>

  • <xsl:template match="/">
    XSL 문서에 있는 template는 스타일을 적용하고자 하는 노드를 가리킬 때 사용한다. match 속성에 지정한 노드를 만나면 템플릿을 적용하라는 뜻이다. 즉, 최상위 엘리먼트(/)를 만나면 템플릿을 적용하라는 의미를 갖는 엘리먼트이다.

  • <xsl:for-each select="element">
    select 속성을 통해 찾고자하는 XML 문서의 엘리먼트를 반복하면서 모두 가져온다. 즉, 책목록의 하위 엘리먼트인 <책>이라는 이름을 가진 엘리먼트를 모두 가져온다.

  • <xsl:value-of select="element">
    select 속성을 통해 선택된 엘리먼트 내용의 값을 XPath 표현식으로 가져온다. XPath 표현식을 사용하여, <책>엘리먼트 중 저자가 "정회경"인 <책>엘리먼트를 가져올 때는 select="책목록/책[저자='정회경']" 과 같이 할 수 있다.
- 이 밖에도 몇가지 XSL 문법이 더 있다.

  • <xsl:sort select="저자" />
    sort는 변환된 데이터를 정렬할 때 사용하고, <xsl:for-each> 바로 밑에 위치한다. 한글과 영어가 혼합된 데이터에서는 한글 다음에 영어가 정렬된다.

  • <xsl:if>
    if는 주로 XML 문서의 데이터를 조건에 따라 만족하는 값으로 추출할 때 사용된다.
    <xsl:if test="가격&gt;'10000'">
      문장...
      문장...
    </xsl:if>

    - 가격이 10,000원 이상일 때 다음 문장을 수행하라는 뜻이다.

  • <xsl:choose>
    C 언어에서의 switch...case문처럼 어떤 특정한 조건이 맞을 때 그 맞는 조건에 대한 값을 선택할 때 사용한다. <xsl:choose>는 <xsl:when>과 <xsl:otherwise>와 함께 사용한다.
    <xsl:choose>
      <xsl:when test="가격&gt;'10000'">
          문장 수행...
      </xsl:when>
      <xsl:otherwise>
          문장 수행...
      </xsl:otherwise>
    </xsl:choose>

    - 가격이 10,000원 보다 크면 <xsl:when> 이하의 문장 수행, 그렇지 않은 경우에는 <xsl:otherwise> 이하의 문장 수행

  • <xsl:apply-templates>
    XML 문서의 엘리먼트에 대해서 개별적인 스타일을 지정하는 template를 구성하여 적용할 수 있도록 한다. 즉, 특정한 그룹을 묶어 따로 스타일을 적용한다.

* XSL 문서를 작성했으면 XML 문서의 선언부 바로 밑에 XSL 정보를 삽입한다.
<?xml-stylesheet type="text/xsl" href="book.xsl"?>


View XSL Output

XSL 문서가 XML 문서에 적용되어 소스도 HTML로 보여져야 하지만 MSXML 파서가 XSLT를 완벽하게 지원하지 않으므로 XML 소스를 그대로 보여준다.

하지만 DTD 유효성 검사를 위한 유틸리티를 설치했던 "maxmlvw.inf"가 XSLT를 통해 변환된 HTML 코드를 볼 수 있도록 해주는 역할을 한다.

XML 문서에서 오른쪽 마우스 버튼을 클릭하여 [View XSL Output] 항목을 클릭하면 XSL과 XML 문서를 이용하여 XSLT 변환기에 의해 생성된 HTML 소스를 볼 수 있다.

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,