Java에서 XSL 적용

Posted by Albert 18Day 6Hour 23Min 32Sec ago [2026-02-19]

XSL(Extensible Stylesheet Language)은 쉽게 말해 **"XML 데이터를 어떻게 보여줄지 정의하는 디자인 시트"**입니다. 주로 XML을 HTML로 변환하거나, 다른 구조의 XML로 바꿀 때 사용합니다.

Java 환경에서 XSLT(XSL Transformations)를 작성할 때 꼭 알아야 할 핵심 문법을 알기 쉽게 정리해 드릴게요.

1. XSL 파일의 기본 구조

모든 XSL 파일은 XML 형식을 따르며, 아래와 같은 기본 선언으로 시작합니다.

XML


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="html" indent="yes"/>

  <xsl:template match="/">
    <html>
      <body>
        <h2>내 데이터 목록</h2>
        <xsl:apply-templates select="root/item" />
      </body>
    </html>
  </xsl:template>

</xsl:stylesheet>

2. 핵심 문법 5가지

① 데이터 추출 (<xsl:value-of>)

XML의 특정 태그 안에 있는 값을 가져올 때 사용합니다.

  • 문법: <xsl:value-of select="태그경로" />
  • 예시: <p>이름: <xsl:value-of select="name" /></p>

② 반복문 (<xsl:for-each>)

동일한 구조의 데이터가 여러 개일 때 루프를 돕니다.

  • 문법:
  • XML

<xsl:for-each select="users/user">
  <li><xsl:value-of select="name" /></li>
</xsl:for-each>

③ 조건문 - 단순 (<xsl:if>)

특정 조건이 맞을 때만 내용을 표시합니다. (else 문이 없음)

  • 문법:
  • XML

<xsl:if test="age &gt; 19"> <span>성인입니다.</span>
</xsl:if>

④ 조건문 - 다중 (<xsl:choose>)

Java의 switch-case나 if-else와 비슷합니다.

  • 문법:
  • XML

<xsl:choose>
  <xsl:when test="score &gt; 90">A등급</xsl:when>
  <xsl:when test="score &gt; 80">B등급</xsl:when>
  <xsl:otherwise>C등급</xsl:otherwise>
</xsl:choose>

⑤ 템플릿 호출 (<xsl:apply-templates>)

코드가 길어질 때 기능을 분리하여 호출하는 방식입니다. Java의 메소드 호출과 비슷합니다.

  • 사용법: <xsl:apply-templates select="items" />를 호출하면, 하단에 정의된 <xsl:template match="items"> 블록이 실행됩니다.


3. 데이터 파일 (data.xml)

변환의 대상이 되는 순수 데이터 파일입니다. 사용자 목록과 각각의 점수 정보를 담고 있습니다.

XML


<?xml version="1.0" encoding="UTF-8"?>
<root>
    <item>
        <name>홍길동</name>
        <age>25</age>
        <score>95</score>
    </item>
    <item>
        <name>이순신</name>
        <age>17</age>
        <score>82</score>
    </item>
    <item>
        <name>강감찬</name>
        <age>30</age>
        <score>70</score>
    </item>
</root>

4. 디자인 시트 (style.xsl)

XML 데이터를 어떻게 가공하고 보여줄지 결정하는 규칙 파일입니다. 반복문과 조건문을 활용해 HTML 테이블 구조를 만듭니다.

XML


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="yes" encoding="UTF-8"/>

    <xsl:template match="/">
        <html>
        <head><title>사용자 리스트</title></head>
        <body>
            <h2>성적 통계 표</h2>
            <table border="1">
                <tr bgcolor="'efefef">
                    <th>이름</th>
                    <th>나이</th>
                    <th>상태</th>
                    <th>등급</th>
                </tr>
                <xsl:for-each select="root/item">
                <tr>
                    <td><xsl:value-of select="name"/></td>
                    <td><xsl:value-of select="age"/></td>
                    <td>
                        <xsl:if test="age &gt;= 20">성인</xsl:if>
                    </td>
                    <td>
                        <xsl:choose>
                            <xsl:when test="score &gt;= 90"><b>A</b></xsl:when>
                            <xsl:when test="score &gt;= 80">B</xsl:when>
                            <xsl:otherwise>C</xsl:otherwise>
                        </xsl:choose>
                    </td>
                </tr>
                </xsl:for-each>
            </table>
        </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

5. Java 변환 실행 코드 (XslTransformer.java)

Java의 표준 라이브러리인 javax.xml.transform을 사용하여 위 두 파일을 합쳐 결과물을 뽑아냅니다.

Java


import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import java.io.File;

public class XslTransformer {
    public static void main(String[] args) {
        try {
            // 1. 입력 소스 정의 (XML 데이터와 XSL 스타일)
            Source xmlSource = new StreamSource(new File("data.xml"));
            Source xslSource = new StreamSource(new File("style.xsl"));

            // 2. 출력 대상 정의 (결과물 파일명)
            Result outputTarget = new StreamResult(new File("output.html"));

            // 3. 변환기 팩토리 생성 및 실행
            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer transformer = factory.newTransformer(xslSource);

            // 4. 실제 변환 수행
            transformer.transform(xmlSource, outputTarget);

            System.out.println("성공적으로 'output.html' 파일이 생성되었습니다.");

        } catch (TransformerException e) {
            e.printStackTrace();
        }
    }
}





LIST

Copyright © 2014 visionboy.me All Right Reserved.