1. <xsl:choose> 다중 분기 조건
문법 구조 (if … else if … else와 유사)
<xsl:choose>
<xsl:when test="조건식">
조건이 참일 때 출력할 내용
</xsl:when>
<xsl:when test="조건식2">
조건2가 참일 때 출력할 내용
</xsl:when>
<xsl:otherwise>
모든 when 조건이 만족되지 않을 때 출력(선택 사항)
</xsl:otherwise>
</xsl:choose>Code language: HTML, XML (xml)
- 위에서부터 아래로 매치하며 처음 만족하는
<xsl:when>을 만나면 실행을 멈춥니다; <xsl:otherwise>는 모든<xsl:when>뒤에 위치해야 합니다;- 표현식 안에서
>는>로,<는<로 작성합니다.
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head></head>
<body>
<ul>
<!-- 모든 학생 순회 -->
<xsl:for-each select="class/student">
<!-- 나이 기준 오름차순 정렬 -->
<xsl:sort select="age"/>
<!-- 키가 160보다 큰 학생 필터링 -->
<xsl:if test="height > 160">
<li>
<xsl:value-of select="name"/>;
<!-- 다중 조건: 키>200일 때 나이 굵게 표시 -->
<xsl:choose>
<xsl:when test="height > 200">
<b><xsl:value-of select="age"/></b>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="age"/>
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:if>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>Code language: HTML, XML (xml)
실행 흐름:순회 → 나이 정렬 → 키>160 필터 → 키가 200을 넘으면 나이를 굵게 표시합니다.
2. 브라우저 측 XSLT 변환 방식
모든 브라우저가 XSLT를 지원하지는 않으므로 아래 방식으로 해결할 수 있습니다. 현재 대부분 크롬, 파이어폭스를 사용하므로 해당 문제는 거의 발생하지 않지만 알아두면 좋습니다.
1:JavaScript 클라이언트 변환(구 IE 전용)
원리:페이지가 JS를 불러온 뒤 XML 파일과 XSL 스타일시트를 읽어 브라우저 내부에서 변환한 뒤 HTML을 출력합니다.
// XML 불러오기
var xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.load("cdcatalog.xml");
// XSL 불러오기
var xsl = new ActiveXObject("Microsoft.XMLDOM");
xsl.async = false;
xsl.load("cdcatalog.xsl");
// 변환 후 출력
document.write(xml.transformNode(xsl));Code language: JavaScript (javascript)
ActiveXObject는 구버전 IE만 지원하며 최신 크롬, 파이어폭스와 호환되지 않습니다;- 브라우저 내장 XML 파서에 의존해 호환성이 좋지 않습니다.
2:서버 측 변환
핵심 아이디어:브라우저에서 변환하지 않습니다
현재 대부분 프로젝트에서 이 방식을 사용합니다. 서버에서 변환을 처리하면 브라우저 호환 문제가 없으며 기업 환경에서도 많이 사용합니다.
- 백엔드(Java/PHP/.NET 등) XSLT 엔진으로 XML + XSL을 미리 XHTML로 변환;
- 완성된 HTML 페이지를 브라우저에 전달;
- 장점:모든 브라우저 호환,클라이언트는 XSLT 지원이 필요 없습니다.
3. XPath 기본 개념
XPath는 XML 문서 경로 쿼리 언어이며 XSLT의 핵심 기반 기술입니다.
- 경로 표현식으로 XML 노드를 찾습니다(파일 경로와 유사한 개념);
- 내장 표준 함수 라이브러리가 있어 숫자 연산, 문자열 처리가 가능;
- W3C 공식 표준;
select=""、test=""안에 작성하는 모든 표현식은 XPath 문법입니다.
정리
| 태그 | 사용 상황 | 분기 특징 |
|---|---|---|
<xsl:if> | 단일 조건 판단 | 참일 때만 실행, else 없음 |
<xsl:choose> | 다중 조건 분기 | 여러 when + otherwise(else에 해당) |
다중 분기