<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>XSLT 튜토리얼 &#8211; FoxDevelop</title>
	<atom:link href="https://www.foxdevelop.com/ko/category/xslt-%ed%8a%9c%ed%86%a0%eb%a6%ac%ec%96%bc/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.foxdevelop.com</link>
	<description>독립 소프트웨어 개발 스튜디오</description>
	<lastBuildDate>Sun, 16 Aug 2026 05:55:43 +0000</lastBuildDate>
	<language>ko-KR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.4</generator>

<image>
	<url>https://www.foxdevelop.com/wp-content/uploads/2026/05/fox-svgrepo-com-1.png</url>
	<title>XSLT 튜토리얼 &#8211; FoxDevelop</title>
	<link>https://www.foxdevelop.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>서버 측 변환</title>
		<link>https://www.foxdevelop.com/ko/2026/08/16/%ec%84%9c%eb%b2%84-%ec%b8%a1-%eb%b3%80%ed%99%98/</link>
					<comments>https://www.foxdevelop.com/ko/2026/08/16/%ec%84%9c%eb%b2%84-%ec%b8%a1-%eb%b3%80%ed%99%98/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Sun, 16 Aug 2026 05:55:43 +0000</pubDate>
				<category><![CDATA[XSLT 튜토리얼]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8809</guid>

					<description><![CDATA[ASP.NET WebForms + XSLT 변환 처리 흐름]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ASP.NET WebForms + XSLT 변환</p>



<h4 class="wp-block-heading">처리 흐름</h4>



<ol class="wp-block-list">
<li>C# 백엔드에서 데이터베이스로부터<strong>XML 문자열</strong>(학생 데이터)을 가져옵니다</li>



<li>XML 문자열을 <code>MemoryStream</code>에 적재하고 <code>XPathDocument</code>를 생성합니다</li>





<li>프로젝트 물리 경로의 <code>student.xsl</code> 스타일시트를 읽어옵니다</li>



<li><code>XslCompiledTransform</code>으로 XSLT 변환을 실행하고 HTML 문자열을 출력합니다</li>



<li>생성된 HTML을 프론트 페이지에 전달해 렌더링합니다(직접 구현 가능. XSL은 웹 외에도 템플릿 엔진으로 활용할 수 있습니다)</li>
</ol>



<p class="wp-block-paragraph">전체 XML은 직접 준비하세요</p>



<h4 class="wp-block-heading">student.xsl 파일</h4>



<p class="wp-block-paragraph">프로젝트 내부에 배치하세요</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-meta">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">xsl:stylesheet</span> <span class="hljs-attr">version</span>=<span class="hljs-string">"1.0"</span> <span class="hljs-attr">xmlns:xsl</span>=<span class="hljs-string">"http://www.w3.org/1999/XSL/Transform"</span>&gt;</span>
    <span class="hljs-comment">&lt;!-- 출력형식 HTML, 인코딩 UTF‑8 지정, 한글 깨짐 해결 --&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">xsl:output</span> <span class="hljs-attr">method</span>=<span class="hljs-string">"html"</span> <span class="hljs-attr">encoding</span>=<span class="hljs-string">"UTF-8"</span> <span class="hljs-attr">indent</span>=<span class="hljs-string">"yes"</span>/&gt;</span>

    <span class="hljs-tag">&lt;<span class="hljs-name">xsl:template</span> <span class="hljs-attr">match</span>=<span class="hljs-string">"/"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">"UTF-8"</span>/&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>학생 목록<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
                    <span class="hljs-comment">&lt;!-- XML 구조와 매칭：루트→StudentDB→학생 --&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">xsl:for-each</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"StudentDB/학생"</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>
                            번호：<span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"position()"</span>/&gt;</span>
                            이름：<span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"이름"</span>/&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">xsl:for-each</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">xsl:template</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">xsl:stylesheet</span>&gt;</span></code></span></pre>


<h4 class="wp-block-heading">C# 변환 코드</h4>


<pre class="wp-block-code"><span><code class="hljs language-cs"><span class="hljs-keyword">using</span> System;
<span class="hljs-keyword">using</span> System.Text;
<span class="hljs-keyword">using</span> System.IO;
<span class="hljs-keyword">using</span> System.Xml.XPath;
<span class="hljs-keyword">using</span> System.Xml.Xsl;

<span class="hljs-keyword">namespace</span> <span class="hljs-title">XslDemo.Web</span>
{
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">partial</span> <span class="hljs-keyword">class</span> <span class="hljs-title">Default</span> : <span class="hljs-title">System</span>.<span class="hljs-title">Web</span>.<span class="hljs-title">UI</span>.<span class="hljs-title">Page</span>
    {
        <span class="hljs-keyword">protected</span> <span class="hljs-keyword">string</span> studentHtml = <span class="hljs-keyword">string</span>.Empty;
        <span class="hljs-function"><span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">Page_Load</span>(<span class="hljs-params"><span class="hljs-keyword">object</span> sender, EventArgs e</span>)</span>
        {
            <span class="hljs-keyword">if</span> (!IsPostBack)
            {
                <span class="hljs-comment">//1. BLL 계층에서 DB의 XML 문자열 가져오기</span>
                <span class="hljs-keyword">string</span> xml = <span class="hljs-keyword">new</span> BLL.student().GetAllListXml();
                <span class="hljs-keyword">byte</span>&#91;] arr = Encoding.UTF8.GetBytes(xml);
                <span class="hljs-keyword">using</span> (MemoryStream stream = <span class="hljs-keyword">new</span> MemoryStream(arr))
                {
                    XPathDocument xpd = <span class="hljs-keyword">new</span> XPathDocument(stream);
                    <span class="hljs-keyword">string</span> xslPath = Context.Server.MapPath(<span class="hljs-string">"/student.xsl"</span>);

                    <span class="hljs-comment">// XSL 파일 존재 여부 확인</span>
                    <span class="hljs-keyword">if</span> (!File.Exists(xslPath))
                    {
                        studentHtml = <span class="hljs-string">"XSL 스타일 파일이 존재하지 않습니다!"</span>;
                        <span class="hljs-keyword">return</span>;
                    }

                    XslCompiledTransform tran = <span class="hljs-keyword">new</span> XslCompiledTransform();
                    tran.Load(xslPath);

                    StringBuilder sb = <span class="hljs-keyword">new</span> StringBuilder();
                    tran.Transform(xpd, <span class="hljs-literal">null</span>, <span class="hljs-keyword">new</span> StringWriter(sb));

                    <span class="hljs-comment">// 【핵심】페이지 변수에 할당</span>
                    studentHtml = sb.ToString();
                }
            }
        }
    }
}</code></span></pre>


<p class="wp-block-paragraph">aspx에 출력하려면 플레이스홀더로 치환하여 사용합니다</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">%@</span> <span class="hljs-attr">Page</span> <span class="hljs-attr">Language</span>=<span class="hljs-string">"C#"</span> <span class="hljs-attr">AutoEventWireup</span>=<span class="hljs-string">"true"</span> <span class="hljs-attr">CodeBehind</span>=<span class="hljs-string">"Default.aspx.cs"</span> <span class="hljs-attr">Inherits</span>=<span class="hljs-string">"XslDemo.Web.Default"</span> %&gt;</span>
<span class="hljs-meta">&lt;!DOCTYPE <span class="hljs-meta-keyword">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">%--XSLT</span> 변환 결과 <span class="hljs-attr">HTML</span> 출력<span class="hljs-attr">--</span>%&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">%=studentHtml</span> %&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span></code></span></pre>


<p class="wp-block-paragraph">서버 측 변환</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/ko/2026/08/16/%ec%84%9c%eb%b2%84-%ec%b8%a1-%eb%b3%80%ed%99%98/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>XPath</title>
		<link>https://www.foxdevelop.com/ko/2026/08/16/xpath-13/</link>
					<comments>https://www.foxdevelop.com/ko/2026/08/16/xpath-13/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Sun, 16 Aug 2026 05:47:16 +0000</pubDate>
				<category><![CDATA[XSLT 튜토리얼]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8791</guid>

					<description><![CDATA[개념 XPath는 W3C 표준으로 XML 문서에서 노드를 탐색하고 조회하기 위한 기술이며 XSLT의 핵심 기반입니다. XSLT의 select="", test="" 내부 표현식은 전부 XPath를 사용합니다. 7가지 노드 유형 문서 노드(루트 노드), 요소 노드, ...]]></description>
										<content:encoded><![CDATA[
<h4 class="wp-block-heading">개념</h4>



<p class="wp-block-paragraph"><br>XPath는 W3C 표준으로 <strong>XML 문서에서 노드를 탐색하고 조회</strong>하기 위한 기술이며 XSLT의 핵심 기반입니다. XSLT의 <code>select=""</code>, <code>test=""</code> 내부 표현식은 전부 XPath를 사용합니다.</p>



<ol class="wp-block-list">
<li></li>
</ol>



<ul class="wp-block-list">
<li>경로 표현식으로 노드를 찾음</li>



<li>문자열, 숫자, 날짜 비교, 노드 처리, 논리 연산 등 100개 이상의 내장 표준 함수 제공</li>
</ul>



<h4 class="wp-block-heading">7가지 노드 유형</h4>



<p class="wp-block-paragraph">문서 노드(루트 노드), <strong>요소 노드</strong>, <strong>속성 노드</strong>, 텍스트 노드, 주석 노드, 처리 명령 노드, 네임스페이스 노드.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">예시：<code>&lt;title lang="eng"&gt;Harry Potter&lt;/title&gt;</code></p>



<ul class="wp-block-list">
<li><code>&lt;title&gt;</code> → 요소 노드</li>



<li><code>lang="eng"</code> → 속성 노드</li>



<li><code>Harry Potter</code> → 텍스트 노드</li>
</ul>
</blockquote>



<h4 class="wp-block-heading">개념</h4>



<ol class="wp-block-list">
<li><strong>원자 값(Atomic value)</strong>：자식도 부모도 없는 노드 내용，예：<code>eng</code>、<code>29.99</code></li>



<li><strong>아이템(Item)</strong>：아이템 = 노드 또는 원자 값</li>
</ol>



<h4 class="wp-block-heading">XML 노드 간 관계</h4>



<p class="wp-block-paragraph"><code>&lt;bookstore&gt;&lt;book&gt;&lt;title&gt;&lt;/title&gt;&lt;/book&gt;&lt;/bookstore&gt;</code> 를 예시로</p>



<ol class="wp-block-list">
<li><strong>부모(Parent)</strong>：모든 요소와 속성은 부모가 하나만 존재；<code>book</code> 은 <code>title</code>의 부모 노드</li>



<li><strong>자식(Children)</strong>：요소는 여러 자식 노드를 가질 수 있음；<code>title</code>、<code>price</code> 는 <code>book</code>의 자식 노드</li>



<li><strong>형제(Sibling)</strong>：<strong>동일한 부모 노드</strong>를 가짐；같은 레벨의 title, price는 서로 형제 노드</li>



<li><strong>조상(Ancestor)</strong>：부모, 부모의 부모 등 상위 모든 노드；<code>title</code>의 조상：book, bookstore</li>
</ol>



<h4 class="wp-block-heading">경로 표현식</h4>



<p class="wp-block-paragraph">경로와 단계를 이용하여 XML 노드를 선택</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">bookstore</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">book</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">title</span> <span class="hljs-attr">lang</span>=<span class="hljs-string">"eng"</span>&gt;</span>Harry Potter<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">price</span>&gt;</span>29.99<span class="hljs-tag">&lt;/<span class="hljs-name">price</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">book</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">bookstore</span>&gt;</span></code></span></pre>


<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>표현식</th><th>의미</th></tr></thead><tbody><tr><td><code>bookstore</code></td><td>루트 아래 bookstore 요소 선택</td></tr><tr><td><code>/bookstore</code></td><td>절대 경로, 루트 노드부터 매칭</td></tr><tr><td><code>bookstore/book</code></td><td>bookstore 하위 모든 book 자식 요소 선택</td></tr><tr><td><code>//book</code></td><td>문서 <strong>전체 영역</strong>의 book 요소(전역 검색)</td></tr><tr><td><code>//@lang</code></td><td>이름이 lang인 <strong>속성 노드</strong> 전부 선택</td></tr></tbody></table></figure>



<h4 class="wp-block-heading">XPath 함수：<code>position()</code></h4>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"position()"</span> /&gt;</span></code></span></pre>


<p class="wp-block-paragraph"><code>position()</code>은 XPath 내장 함수로 <strong>노드 집합에서 현재 순회 중인 노드의 일련번호</strong>를 가져오며 1부터 카운트합니다.</p>



<h4 class="wp-block-heading">예시，일련번호 출력</h4>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-meta">&lt;?xml version="1.0" encoding="gb2312"?&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">xsl:stylesheet</span> <span class="hljs-attr">version</span>=<span class="hljs-string">"1.0"</span> <span class="hljs-attr">xmlns:xsl</span>=<span class="hljs-string">"http://www.w3.org/1999/XSL/Transform"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">xsl:template</span> <span class="hljs-attr">match</span>=<span class="hljs-string">"/"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
    <span class="hljs-comment">&lt;!--모든 학생 class/student 순회 --&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">xsl:for-each</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"class/student"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">xsl:sort</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"age"</span>/&gt;</span>  <span class="hljs-comment">&lt;!--나이 오름차순 정렬--&gt;</span>
        <span class="hljs-comment">&lt;!--키＞160 학생 필터링--&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">xsl:if</span> <span class="hljs-attr">test</span>=<span class="hljs-string">"height <span class="hljs-symbol">&amp;gt;</span> 160"</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"position()"</span> /&gt;</span>、<span class="hljs-comment">&lt;!--일련번호 출력--&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"name"</span>/&gt;</span>；
                <span class="hljs-comment">&lt;!--다중 조건 분기--&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">xsl:choose</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">xsl:when</span> <span class="hljs-attr">test</span>=<span class="hljs-string">"height <span class="hljs-symbol">&amp;gt;</span> 200"</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">b</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"age"</span>/&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">b</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">xsl:when</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">xsl:otherwise</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"age"</span>/&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">xsl:otherwise</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">xsl:choose</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">xsl:if</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">xsl:for-each</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">xsl:template</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">xsl:stylesheet</span>&gt;</span></code></span></pre>


<p class="wp-block-paragraph">XPath</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/ko/2026/08/16/xpath-13/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>다중 분기</title>
		<link>https://www.foxdevelop.com/ko/2026/08/15/%eb%8b%a4%ec%a4%91-%eb%b6%84%ea%b8%b0/</link>
					<comments>https://www.foxdevelop.com/ko/2026/08/15/%eb%8b%a4%ec%a4%91-%eb%b6%84%ea%b8%b0/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Sat, 15 Aug 2026 14:51:13 +0000</pubDate>
				<category><![CDATA[XSLT 튜토리얼]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8777</guid>

					<description><![CDATA[1. &#60;xsl:choose> 다중 분기 조건 문법 구조 (if … else if … else와 유사) 실행 흐름：순회 → 나이 정렬 → 키＞160 필터 → 키가 200을 넘으면 나이를 굵게 표시합니다. 2. ...]]></description>
										<content:encoded><![CDATA[
<h4 class="wp-block-heading">1. <code>&lt;xsl:choose></code> 다중 분기 조건</h4>



<h5 class="wp-block-heading">문법 구조 (<code>if … else if … else</code>와 유사)</h5>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">xsl:choose</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">xsl:when</span> <span class="hljs-attr">test</span>=<span class="hljs-string">"조건식"</span>&gt;</span>
        조건이 참일 때 출력할 내용
    <span class="hljs-tag">&lt;/<span class="hljs-name">xsl:when</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">xsl:when</span> <span class="hljs-attr">test</span>=<span class="hljs-string">"조건식2"</span>&gt;</span>
        조건2가 참일 때 출력할 내용
    <span class="hljs-tag">&lt;/<span class="hljs-name">xsl:when</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">xsl:otherwise</span>&gt;</span>
        모든 when 조건이 만족되지 않을 때 출력(선택 사항)
    <span class="hljs-tag">&lt;/<span class="hljs-name">xsl:otherwise</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">xsl:choose</span>&gt;</span></code></span></pre>


<ol class="wp-block-list">
<li>위에서부터 아래로 매치하며 <strong>처음 만족하는 <code>&lt;xsl:when></code>을 만나면 실행을 멈춥니다</strong>;</li>



<li><code>&lt;xsl:otherwise></code>는 모든 <code>&lt;xsl:when></code> 뒤에 위치해야 합니다;</li>



<li>표현식 안에서 <code>></code>는 <code>&amp;gt;</code>로, <code>&lt;</code>는 <code>&amp;lt;</code>로 작성합니다.</li>
</ol>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-meta">&lt;?xml version="1.0" encoding="gb2312"?&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">xsl:stylesheet</span> <span class="hljs-attr">version</span>=<span class="hljs-string">"1.0"</span> <span class="hljs-attr">xmlns:xsl</span>=<span class="hljs-string">"http://www.w3.org/1999/XSL/Transform"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">xsl:template</span> <span class="hljs-attr">match</span>=<span class="hljs-string">"/"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
    <span class="hljs-comment">&lt;!-- 모든 학생 순회 --&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">xsl:for-each</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"class/student"</span>&gt;</span>
        <span class="hljs-comment">&lt;!-- 나이 기준 오름차순 정렬 --&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">xsl:sort</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"age"</span>/&gt;</span>
        <span class="hljs-comment">&lt;!-- 키가 160보다 큰 학생 필터링 --&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">xsl:if</span> <span class="hljs-attr">test</span>=<span class="hljs-string">"height <span class="hljs-symbol">&amp;gt;</span> 160"</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"name"</span>/&gt;</span>；
                <span class="hljs-comment">&lt;!-- 다중 조건: 키＞200일 때 나이 굵게 표시 --&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">xsl:choose</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">xsl:when</span> <span class="hljs-attr">test</span>=<span class="hljs-string">"height <span class="hljs-symbol">&amp;gt;</span> 200"</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">b</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"age"</span>/&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">b</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">xsl:when</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">xsl:otherwise</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"age"</span>/&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">xsl:otherwise</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">xsl:choose</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">xsl:if</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">xsl:for-each</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">xsl:template</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">xsl:stylesheet</span>&gt;</span></code></span></pre>


<p class="wp-block-paragraph">실행 흐름：순회 → 나이 정렬 → 키＞160 필터 → 키가 200을 넘으면 나이를 굵게 표시합니다.</p>



<h4 class="wp-block-heading">2. 브라우저 측 XSLT 변환 방식</h4>



<p class="wp-block-paragraph">모든 브라우저가 XSLT를 지원하지는 않으므로 아래 방식으로 해결할 수 있습니다. 현재 대부분 크롬, 파이어폭스를 사용하므로 해당 문제는 거의 발생하지 않지만 알아두면 좋습니다.</p>



<h5 class="wp-block-heading">1：JavaScript 클라이언트 변환(구 IE 전용)</h5>



<p class="wp-block-paragraph">원리：페이지가 JS를 불러온 뒤 XML 파일과 XSL 스타일시트를 읽어 브라우저 내부에서 변환한 뒤 HTML을 출력합니다.</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-comment">// XML 불러오기</span>
<span class="hljs-keyword">var</span> xml = <span class="hljs-keyword">new</span> ActiveXObject(<span class="hljs-string">"Microsoft.XMLDOM"</span>);
xml.async = <span class="hljs-literal">false</span>;
xml.load(<span class="hljs-string">"cdcatalog.xml"</span>);
<span class="hljs-comment">// XSL 불러오기</span>
<span class="hljs-keyword">var</span> xsl = <span class="hljs-keyword">new</span> ActiveXObject(<span class="hljs-string">"Microsoft.XMLDOM"</span>);
xsl.async = <span class="hljs-literal">false</span>;
xsl.load(<span class="hljs-string">"cdcatalog.xsl"</span>);
<span class="hljs-comment">// 변환 후 출력</span>
<span class="hljs-built_in">document</span>.write(xml.transformNode(xsl));</code></span></pre>


<ol class="wp-block-list">
<li><code>ActiveXObject</code>는 구버전 IE만 지원하며 최신 크롬, 파이어폭스와 호환되지 않습니다；</li>



<li>브라우저 내장 XML 파서에 의존해 호환성이 좋지 않습니다.</li>
</ol>



<h5 class="wp-block-heading">2：서버 측 변환</h5>



<p class="wp-block-paragraph">핵심 아이디어：<strong>브라우저에서 변환하지 않습니다</strong></p>



<p class="wp-block-paragraph"><mark style="background-color:#03c4eb" class="has-inline-color">현재 대부분 프로젝트에서 이 방식을 사용합니다. 서버에서 변환을 처리하면 브라우저 호환 문제가 없으며 기업 환경에서도 많이 사용합니다.</mark></p>



<ol class="wp-block-list">
<li>백엔드(Java/PHP/.NET 등) XSLT 엔진으로 XML + XSL을 미리 XHTML로 변환；</li>



<li>완성된 HTML 페이지를 브라우저에 전달；</li>



<li>장점：<strong>모든 브라우저 호환</strong>，클라이언트는 XSLT 지원이 필요 없습니다.</li>
</ol>



<h4 class="wp-block-heading">3. XPath 기본 개념</h4>



<p class="wp-block-paragraph">XPath는 <strong>XML 문서 경로 쿼리 언어</strong>이며 XSLT의 핵심 기반 기술입니다.</p>



<ol class="wp-block-list">
<li><strong>경로 표현식</strong>으로 XML 노드를 찾습니다(파일 경로와 유사한 개념)；</li>



<li>내장 표준 함수 라이브러리가 있어 숫자 연산, 문자열 처리가 가능；</li>



<li>W3C 공식 표준；</li>



<li><code>select=""</code>、<code>test=""</code> 안에 작성하는 모든 표현식은 XPath 문법입니다.</li>
</ol>



<h4 class="wp-block-heading">정리</h4>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>태그</th><th>사용 상황</th><th>분기 특징</th></tr></thead><tbody><tr><td><code>&lt;xsl:if&gt;</code></td><td>단일 조건 판단</td><td>참일 때만 실행, else 없음</td></tr><tr><td><code>&lt;xsl:choose&gt;</code></td><td>다중 조건 분기</td><td>여러 when + otherwise(else에 해당)</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">다중 분기</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/ko/2026/08/15/%eb%8b%a4%ec%a4%91-%eb%b6%84%ea%b8%b0/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>조건 판단과 정렬</title>
		<link>https://www.foxdevelop.com/ko/2026/08/15/%ec%a1%b0%ea%b1%b4-%ed%8c%90%eb%8b%a8%ea%b3%bc-%ec%a0%95%eb%a0%ac/</link>
					<comments>https://www.foxdevelop.com/ko/2026/08/15/%ec%a1%b0%ea%b1%b4-%ed%8c%90%eb%8b%a8%ea%b3%bc-%ec%a0%95%eb%a0%ac/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Sat, 15 Aug 2026 14:43:58 +0000</pubDate>
				<category><![CDATA[XSLT 튜토리얼]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8761</guid>

					<description><![CDATA[1. &#60;xsl:sort&#62; 정렬 &#60;xsl:for-each&#62;와 함께 사용하여 반복 순회하는 데이터를 정렬합니다. 문법 규칙 예시: 학생 나이 오름차순 정렬 내림차순 작성 예시: 2. &#60;xsl:if&#62; 단일 조건 판단 조건이 만족될 때만 내용을 출력하며 ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">1. <code>&lt;xsl:sort&gt;</code> 정렬</h4>



<p class="wp-block-paragraph"><code>&lt;xsl:for-each&gt;</code>와 함께 사용하여 반복 순회하는 데이터를 정렬합니다.</p>



<h5 class="wp-block-heading">문법 규칙</h5>



<ol class="wp-block-list">
<li><strong>위치 제약</strong>：<code>&lt;xsl:for-each></code> 내부에서 출력 내용보다 앞쪽에 작성해야 합니다.</li>



<li><code>select="필드이름"</code>：정렬 기준이 될 노드를 지정합니다.</li>



<li>기본값은<strong>오름차순</strong>이며 <code>order="descending"</code>을 추가하면 내림차순이 적용됩니다.</li>
</ol>



<p class="wp-block-paragraph">예시: 학생 나이 오름차순 정렬</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">xsl:for-each</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"class/student"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">xsl:sort</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"age"</span>/&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"name"</span>/&gt;</span>；<span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"age"</span>/&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">xsl:for-each</span>&gt;</span></code></span></pre>


<p class="wp-block-paragraph">내림차순 작성 예시:</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">xsl:sort</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"age"</span> <span class="hljs-attr">order</span>=<span class="hljs-string">"descending"</span>/&gt;</span></code></span></pre>


<h4 class="wp-block-heading">2. <code>&lt;xsl:if&gt;</code> 단일 조건 판단</h4>



<p class="wp-block-paragraph">조건이 만족될 때만 내용을 출력하며 <strong>else 분기는 지원하지 않습니다</strong>.</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">xsl:if</span> <span class="hljs-attr">test</span>=<span class="hljs-string">"조건식"</span>&gt;</span>
    조건 충족 시 보여줄 내용
<span class="hljs-tag">&lt;/<span class="hljs-name">xsl:if</span>&gt;</span></code></span></pre>


<p class="wp-block-paragraph">주의: <code>test</code> 속성 안에서 부등호 <code>></code>는 <code>&amp;gt;</code>로, <code>&lt;</code>는 <code>&amp;lt;</code>로 사용해야 합니다.</p>



<p class="wp-block-paragraph">예시: 키가 160보다 큰 학생 필터링</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">xsl:for-each</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"class/student"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">xsl:sort</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"age"</span>/&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">xsl:if</span> <span class="hljs-attr">test</span>=<span class="hljs-string">"height <span class="hljs-symbol">&amp;gt;</span> 160"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"name"</span>/&gt;</span>；<span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"age"</span>/&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">xsl:if</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">xsl:for-each</span>&gt;</span></code></span></pre>


<p class="wp-block-paragraph">조건 판단과 정렬</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/ko/2026/08/15/%ec%a1%b0%ea%b1%b4-%ed%8c%90%eb%8b%a8%ea%b3%bc-%ec%a0%95%eb%a0%ac/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>반복문</title>
		<link>https://www.foxdevelop.com/ko/2026/08/15/%eb%b0%98%eb%b3%b5%eb%ac%b8-2/</link>
					<comments>https://www.foxdevelop.com/ko/2026/08/15/%eb%b0%98%eb%b3%b5%eb%ac%b8-2/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Sat, 15 Aug 2026 14:36:13 +0000</pubDate>
				<category><![CDATA[XSLT 튜토리얼]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8745</guid>

					<description><![CDATA[핵심 태그 1. &#60;xsl:value-of&#62; 역할：지정한 XML 노드의 텍스트 내용을 추출하여 결과 문서에 출력합니다. &#60;xsl:for-each> 반복문과 함께 사용하지 않으면 첫 번째 일치 노드만 가져오며 전체 데이터를 순회할 수 없습니다. 2. &#60;xsl:for-each&#62; ...]]></description>
										<content:encoded><![CDATA[<!-- 韩语 한국어 -->

<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">핵심 태그</h3>



<h5 class="wp-block-heading">1. <code>&lt;xsl:value-of&gt;</code></h5>



<p class="wp-block-paragraph"><strong>역할</strong>：지정한 XML 노드의 텍스트 내용을 추출하여 결과 문서에 출력합니다.</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-comment">&lt;!-- 첫 번째 catalog/cd의 title 값 가져오기 (반복문 없으면 첫 번째 데이터만 가져옴) --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"catalog/cd/title"</span> /&gt;</span></code></span></pre>


<p class="wp-block-paragraph"><code>&lt;xsl:for-each></code> 반복문과 함께 사용하지 않으면 <strong>첫 번째 일치 노드만 가져오며</strong> 전체 데이터를 순회할 수 없습니다.</p>



<h5 class="wp-block-heading">2. <code>&lt;xsl:for-each&gt;</code></h5>



<p class="wp-block-paragraph"><strong>역할</strong>：조건에 일치하는 XML 노드 묶음을 순회하며 여러 데이터를 일괄 처리합니다.</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">xsl:for-each</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"class/student"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"name"</span>/&gt;</span>；<span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"age"</span>/&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">xsl:for-each</span>&gt;</span></code></span></pre>


<h4 class="wp-block-heading">XPath 필터 문법</h4>



<p class="wp-block-paragraph"><code>select</code> 경로 뒤에 <code>[조건]</code>을 사용해 노드를 걸러내 데이터 필터링을 구현합니다</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-comment">&lt;!-- artist가 Bob Dylan인 cd 레코드만 출력 --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">xsl:for-each</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"catalog/cd&#91;artist='Bob Tom']"</span>&gt;</span></code></span></pre>


<p class="wp-block-paragraph"><strong>지원하는 연산자</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>연산자</th><th>XPath 표기</th><th>의미</th></tr></thead><tbody><tr><td>=</td><td><code>=</code></td><td>같다</td></tr><tr><td>!=</td><td><code>!=</code></td><td>다르다</td></tr><tr><td>&lt;</td><td><code>&amp;lt;</code></td><td>작다（<strong>&lt;를 직접 쓰지 말고 이스케이프 필수</strong>）</td></tr><tr><td>&gt;</td><td><code>&amp;gt;</code></td><td>크다（<strong>&gt;를 직접 쓰지 말고 이스케이프 필수</strong>）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">예：가격이 10보다 작은 CD 필터링</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">xsl:for-each</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"catalog/cd&#91;price <span class="hljs-symbol">&amp;lt;</span> 10]"</span>&gt;</span></code></span></pre>


<h4 class="wp-block-heading">이전 예제</h4>



<h5 class="wp-block-heading">student.xsl</h5>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-meta">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">xsl:stylesheet</span> <span class="hljs-attr">version</span>=<span class="hljs-string">"1.0"</span> <span class="hljs-attr">xmlns:xsl</span>=<span class="hljs-string">"http://www.w3.org/1999/XSL/Transform"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">xsl:template</span> <span class="hljs-attr">match</span>=<span class="hljs-string">"/"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
        <span class="hljs-comment">&lt;!-- 모든 student 노드 순회 --&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">xsl:for-each</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"class/student"</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"name"</span>/&gt;</span>；<span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"age"</span>/&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">xsl:for-each</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">xsl:template</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">xsl:stylesheet</span>&gt;</span></code></span></pre>


<p class="wp-block-paragraph">연동 XML（student.xml）</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-meta">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
<span class="hljs-meta">&lt;?xml-stylesheet type="text/xsl" href="student.xsl"?&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">class</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">student</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">name</span>&gt;</span>Jack<span class="hljs-tag">&lt;/<span class="hljs-name">name</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">age</span>&gt;</span>16<span class="hljs-tag">&lt;/<span class="hljs-name">age</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">student</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">student</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">name</span>&gt;</span>Jim<span class="hljs-tag">&lt;/<span class="hljs-name">name</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">age</span>&gt;</span>12<span class="hljs-tag">&lt;/<span class="hljs-name">age</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">student</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">class</span>&gt;</span></code></span></pre>


<h4 class="wp-block-heading">필터 추가</h4>



<p class="wp-block-paragraph">나이가 14세보다 큰 학생만 출력</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">xsl:for-each</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"class/student&#91;age <span class="hljs-symbol">&amp;gt;</span> 14]"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"name"</span>/&gt;</span>；<span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"age"</span>/&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">xsl:for-each</span>&gt;</span></code></span></pre>


<p class="wp-block-paragraph">반복문</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/ko/2026/08/15/%eb%b0%98%eb%b3%b5%eb%ac%b8-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>XSLT 예제</title>
		<link>https://www.foxdevelop.com/ko/2026/08/15/xslt-%ec%98%88%ec%a0%9c/</link>
					<comments>https://www.foxdevelop.com/ko/2026/08/15/xslt-%ec%98%88%ec%a0%9c/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Sat, 15 Aug 2026 13:56:36 +0000</pubDate>
				<category><![CDATA[XSLT 튜토리얼]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8729</guid>

					<description><![CDATA[XML + XSLT HTML 변환 완전 예제 두 개의 파일을 준비하세요： XML 파일 인코딩이 ISO‑8859‑1(서유럽 문자 집합)으로 선언되어 있으면 영어 외 문자가 정상적으로 저장되지 않아 깨진 글자가 생깁니다. 코드에서 UTF‑8로 ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">XML + XSLT HTML 변환 완전 예제</p>



<p class="wp-block-paragraph">두 개의 파일을 준비하세요：</p>



<ol class="wp-block-list">
<li><code>students.xml</code>：학생 정보를 저장하는 원본 XML 문서</li>



<li><code>transform.xsl</code>：XML을 HTML 페이지로 바꿔주는 XSL 스타일시트<br>브라우저에서 <code>students.xml</code>을 불러오면 XSLT 규칙을 자동으로 참조해 웹페이지로 렌더링합니다.</li>
</ol>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">XML 파일 인코딩이 <code>ISO‑8859‑1</code>(서유럽 문자 집합)으로 선언되어 있으면 영어 외 문자가 정상적으로 저장되지 않아 깨진 글자가 생깁니다. 코드에서 UTF‑8로 통일 수정해야 문자 깨짐 문제를 완전히 해결할 수 있습니다.</p>
</blockquote>



<h4 class="wp-block-heading">students.xml</h4>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-meta">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
<span class="hljs-meta">&lt;?xml-stylesheet type="text/xsl" href="transform.xsl"?&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">class</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">student</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">name</span>&gt;</span>Tom<span class="hljs-tag">&lt;/<span class="hljs-name">name</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">age</span>&gt;</span>12<span class="hljs-tag">&lt;/<span class="hljs-name">age</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">height</span>&gt;</span>145<span class="hljs-tag">&lt;/<span class="hljs-name">height</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">student</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">student</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">name</span>&gt;</span>Jack<span class="hljs-tag">&lt;/<span class="hljs-name">name</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">age</span>&gt;</span>16<span class="hljs-tag">&lt;/<span class="hljs-name">age</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">height</span>&gt;</span>175<span class="hljs-tag">&lt;/<span class="hljs-name">height</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">student</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">student</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">name</span>&gt;</span>Smiths<span class="hljs-tag">&lt;/<span class="hljs-name">name</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">age</span>&gt;</span>22<span class="hljs-tag">&lt;/<span class="hljs-name">age</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">height</span>&gt;</span>245<span class="hljs-tag">&lt;/<span class="hljs-name">height</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">student</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">class</span>&gt;</span></code></span></pre>


<p class="wp-block-paragraph">주요 설명：</p>



<ul class="wp-block-list">
<li><code>&lt;?xml-stylesheet ... ?></code> 처리 지시：브라우저에 transform.xsl을 사용해 현재 XML을 변환하라고 알려줌</li>



<li><code>encoding="UTF-8"</code>：모든 언어 문자를 지원하며 문자 깨짐 방지</li>
</ul>



<h4 class="wp-block-heading">transform.xsl</h4>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-meta">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">xsl:stylesheet</span> <span class="hljs-attr">version</span>=<span class="hljs-string">"1.0"</span> <span class="hljs-attr">xmlns:xsl</span>=<span class="hljs-string">"http://www.w3.org/1999/XSL/Transform"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">xsl:template</span> <span class="hljs-attr">match</span>=<span class="hljs-string">"/"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">http-equiv</span>=<span class="hljs-string">"Content-Type"</span> <span class="hljs-attr">content</span>=<span class="hljs-string">"text/html; charset=UTF-8"</span> /&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>Student List<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">h3</span>&gt;</span>Student Name List<span class="hljs-tag">&lt;/<span class="hljs-name">h3</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
                    <span class="hljs-comment">&lt;!-- class/student 노드를 모두 반복 읽기 --&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">xsl:for-each</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"class/student"</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"name"</span>/&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">xsl:for-each</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">xsl:template</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">xsl:stylesheet</span>&gt;</span></code></span></pre>


<h3 class="wp-block-heading">핵심 문법 설명</h3>



<ol class="wp-block-list">
<li><code>&lt;xsl:stylesheet></code>：XSLT 루트 태그, 네임스페이스 선언</li>



<li><code>&lt;xsl:template match="/"></code>：XML 루트 노드와 매치, 변환 진입점</li>



<li><code>&lt;xsl:for-each select="class/student"></code>：각 학생 노드를 순회</li>



<li><code>&lt;xsl:value-of select="name"/></code>：<code>&lt;name></code> 노드의 텍스트 내용 추출</li>
</ol>



<h4 class="wp-block-heading">3、실행 방법</h4>



<ol class="wp-block-list">
<li>두 파일을<strong>같은 폴더에 넣기</strong></li>



<li>브라우저로 <code>students.xml</code> 직접 열기</li>



<li>XSLT 엔진이 자동 변환을 실행하고 HTML 목록 페이지가 렌더링됨</li>
</ol>



<h5 class="wp-block-heading">문자가 깨질 경우</h5>



<ol class="wp-block-list">
<li>XML 헤더에 <code>encoding="ISO‑8859‑1"</code>이 적혀있으면 해당 문자 집합은 비영어 문자를 지원하지 않음；</li>



<li>HTML meta 태그 인코딩과 파일 실제 인코딩이 불일치；</li>



<li>파일 저장할 때 편집기 인코딩이 UTF‑8이 아님；</li>
</ol>



<h4 class="wp-block-heading">전체 학생 정보 보여주기</h4>



<p class="wp-block-paragraph">이름, 나이, 키를 함께 보고 싶다면 반복문 부분을 교체하세요：</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">xsl:for-each</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"class/student"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>
        Name: <span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"name"</span>/&gt;</span> ,
        Age: <span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"age"</span>/&gt;</span> ,
        Height: <span class="hljs-tag">&lt;<span class="hljs-name">xsl:value-of</span> <span class="hljs-attr">select</span>=<span class="hljs-string">"height"</span>/&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">xsl:for-each</span>&gt;</span></code></span></pre>


<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="547" height="215" src="https://www.foxdevelop.com/wp-content/uploads/2026/08/image-23.png" alt="" class="wp-image-7253" srcset="https://www.foxdevelop.com/wp-content/uploads/2026/08/image-23.png 547w, https://www.foxdevelop.com/wp-content/uploads/2026/08/image-23-300x118.png 300w" sizes="(max-width: 547px) 100vw, 547px" /></figure>



<p class="wp-block-paragraph">XSLT 예제</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/ko/2026/08/15/xslt-%ec%98%88%ec%a0%9c/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>소개</title>
		<link>https://www.foxdevelop.com/ko/2026/08/15/%ec%86%8c%ea%b0%9c-7/</link>
					<comments>https://www.foxdevelop.com/ko/2026/08/15/%ec%86%8c%ea%b0%9c-7/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Sat, 15 Aug 2026 13:38:56 +0000</pubDate>
				<category><![CDATA[XSLT 튜토리얼]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8713</guid>

					<description><![CDATA[1. 기본 개념 1. XSL XSL(EXtensible Stylesheet Language, 확장 스타일시트 언어)W3C에서 XML을 위해 제정한 스타일시트 언어입니다. CSS가 HTML용 스타일시트라면 XSL은 XML 전용입니다. 넓은 의미에서 XSL은 세 가지 구성 요소를 포함합니다: ...]]></description>
										<content:encoded><![CDATA[<!-- 한국어 -->

<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">1. 기본 개념</h3>



<h4 class="wp-block-heading">1. XSL</h4>



<p class="wp-block-paragraph"><strong>XSL(EXtensible Stylesheet Language, 확장 스타일시트 언어)</strong><br>W3C에서 XML을 위해 제정한 스타일시트 언어입니다. CSS가 HTML용 스타일시트라면 XSL은 XML 전용입니다.</p>



<p class="wp-block-paragraph">넓은 의미에서 XSL은 세 가지 구성 요소를 포함합니다:</p>



<ol class="wp-block-list">
<li><strong>XSLT</strong>: XML 문서 변환 언어(핵심)</li>



<li><strong>XPath</strong>: XML 문서 노드 탐색 및 조회 언어</li>



<li><strong>XSL‑FO</strong>: XML 문서 서식 지정 언어(주로 PDF 생성에 사용)</li>
</ol>



<p class="wp-block-paragraph"></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li>CSS: HTML 스타일시트, 브라우저에서 HTML 렌더링</li>



<li>XSL: XML 스타일시트. <strong>XSLT</strong>는 XML의 변환·렌더링 엔진입니다</li>
</ul>
</blockquote>



<h4 class="wp-block-heading">2. XSLT</h4>



<p class="wp-block-paragraph"><strong>XSLT(XSL Transformations, XSL 변환)</strong><br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> XSL의 가장 중요한 구성 요소이며 <strong>독립적인 언어로 다른 백엔드 언어 없이 실행 가능</strong><br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 역할: 원본 XML 문서를 읽어 HTML/XHTML, 기타 XML, SQL 텍스트 등 다른 형식으로 변환<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 동작 원리: <strong>XML 소스 트리 → 결과 출력 트리</strong>로 변환하며 XML 요소와 속성을 추가·삭제·필터링·재정렬<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 의존성: XPath로 XML 내부 노드를 찾습니다(W3C 표준)</p>



<p class="wp-block-paragraph">간단히 정리하면: <strong>XSLT는 XML을 읽고 XSL 스타일 규칙에 따라 HTML 등의 대상 형식으로 변환합니다</strong></p>



<h3 class="wp-block-heading">2. 변환 흐름</h3>


<pre class="wp-block-code"><span><code class="hljs">XML 데이터 소스 + XSLT 스타일시트(XSL) →【XSLT 프로세서】→ HTML(또는 기타 형식)</code></span></pre>


<p class="wp-block-paragraph">변환 지원 기능:</p>



<ul class="wp-block-list">
<li>XML 요소를 HTML 태그로 매핑</li>



<li>특정 노드를 필터링하거나 숨기고 표시</li>



<li>노드 순서 재배치, 요소·속성 추가 및 삭제</li>
</ul>



<h3 class="wp-block-heading">3. 실행 환경</h3>



<p class="wp-block-paragraph">초기 대부분 주요 브라우저는 XML + XSLT를 기본 지원했습니다:</p>



<ul class="wp-block-list">
<li>Firefox, Mozilla, Netscape, Opera, IE6 이상</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">참고: 현대 브라우저도 지원하지만 브라우저 단에서 직접 XSLT 변환을 사용하는 경우는 줄었습니다. 현재는 백엔드, 데이터 내보내기, 문서 템플릿 처리 위주로 활용됩니다.</p>
</blockquote>



<figure class="wp-block-image size-full"><img decoding="async" width="368" height="215" src="https://www.foxdevelop.com/wp-content/uploads/2026/08/image-22.png" alt="" class="wp-image-7250" srcset="https://www.foxdevelop.com/wp-content/uploads/2026/08/image-22.png 368w, https://www.foxdevelop.com/wp-content/uploads/2026/08/image-22-300x175.png 300w" sizes="(max-width: 368px) 100vw, 368px" /></figure>



<p class="wp-block-paragraph">소개</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/ko/2026/08/15/%ec%86%8c%ea%b0%9c-7/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
