XSLT로 템플릿을 역순으로 적용하기

XML 데이터를 다룰 때, 요소가 표시되는 순서를 조작해야 하는 경우를 마주할 수 있습니다. 자주 요구되는 사항은 노드의 내용을 역순으로 표시하는 것입니다. 이 블로그 포스트에서는 XSLT(확장 스타일 시트 언어 변환)을 사용하여 이를 달성하는 과정을 안내합니다.

문제 이해하기

다음 XML 구조를 고려해 보세요:

<root>
    <node>x</node>
    <node>y</node>
    <node>a</node>
</root>

이 예제에서는 <node> 요소의 내용을 역순으로 표시하고자 하며, 결과는 ayx가 됩니다. 이는 XSLT를 사용하여 apply-templates와 정렬 속성을 통해 이룰 수 있는 일반적인 작업입니다.

솔루션: 노드 순서 반전하기

원하는 출력(즉, 노드를 역순으로 표시하기)을 위해 apply-templates 내에서 xsl:sort 요소를 사용합니다. 다음은 단계별로 구현하는 방법입니다:

Step 1: 루트 템플릿 매칭하기

XML 문서의 루트 레벨을 매칭하는 것부터 시작합니다. 이 템플릿 내에서 <node> 요소에 템플릿을 적용하고, sort 기능을 사용하여 순서를 반전합니다.

<xsl:template match="/">
    <xsl:apply-templates select="root/node">
        <xsl:sort select="position()" data-type="number" order="descending"/>
    </xsl:apply-templates>
</xsl:template>
  • <xsl:template match="/">: XML 문서의 루트를 매칭합니다.
  • <xsl:apply-templates select="root/node">: 처리할 모든 <node> 요소를 선택합니다.
  • <xsl:sort select="position()" data-type="number" order="descending"/>: 노드의 위치를 기준으로 내림차순으로 정렬하여 역순으로 표시하는 데 중요합니다.

Step 2: 노드 템플릿 정의하기

다음으로, 각 <node>가 처리되는 방법을 관리할 또 다른 템플릿이 필요합니다. 이는 각 <node> 요소의 값을 단순히 출력합니다.

<xsl:template match="node">
    <xsl:value-of select="."/>
</xsl:template>
  • <xsl:template match="node">: 각 <node> 요소를 매칭합니다.
  • <xsl:value-of select="."/>: 현재 노드에서 문자열 값을 가져와 출력합니다.

전체 XSLT 코드

두 템플릿을 결합하면 다음 전체 XSLT 코드를 얻게 됩니다:

<xsl:template match="/">
    <xsl:apply-templates select="root/node">
        <xsl:sort select="position()" data-type="number" order="descending"/>
    </xsl:apply-templates>
</xsl:template>

<xsl:template match="node">
    <xsl:value-of select="."/>
</xsl:template>

출력

이 XSLT 코드를 제공된 XML에 적용한 후, 결과 출력은 노드 값이 나타나는 역순으로 표시됩니다:

ayx

결론

XSLT에서 apply-templates를 사용하여 XML 노드의 순서를 반전시키는 것은 sort 기능을 효과적으로 사용하는 방법을 이해하면 간단합니다. 이 접근법은 보고서나 웹 애플리케이션의 데이터 표시를 조작하여 사용자 경험을 향상시킬 필요가 있을 때 유용합니다.

이 단계들을 따라, XSLT를 사용하여 XML 데이터의 출력을 효율적으로 제어할 수 있습니다. 즐거운 코딩 되세요!