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 > 19"> <span>성인입니다.</span> </xsl:if>
④ 조건문 - 다중 (<xsl:choose>)
Java의 switch-case나 if-else와 비슷합니다.
- 문법:
- XML
<xsl:choose> <xsl:when test="score > 90">A등급</xsl:when> <xsl:when test="score > 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 >= 20">성인</xsl:if>
</td>
<td>
<xsl:choose>
<xsl:when test="score >= 90"><b>A</b></xsl:when>
<xsl:when test="score >= 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();
}
}
}