1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml"/> <xsl:template match="*"> <xsl:element name="{name()}"> <xsl:for-each select="@*"> <xsl:element name="{name()}"> <xsl:value-of select="."/> </xsl:element> </xsl:for-each> <xsl:apply-templates select="*|text()"/> </xsl:element> </xsl:template> </xsl:stylesheet> |
XSLT 스타일시트는 XML 문서의 각 요소를 변환하여 원래의 요소 이름을 유지하면서, 해당 요소의 속성들을 별도의 하위 요소로 만들어 출력합니다. 주요 내용은 다음과 같습니다.
- XSLT 선언 및 출력 방식 지정
- <xsl:stylesheet xmlns:xsl=”http://www.w3.org/1999/XSL/Transform” version=”1.0″>
XSLT 1.0 스타일시트임을 선언합니다. - <xsl:output method=”xml”/>
결과 출력 방식을 XML로 지정합니다.
- <xsl:stylesheet xmlns:xsl=”http://www.w3.org/1999/XSL/Transform” version=”1.0″>
- 요소 재구성 템플릿
- <xsl:template match=”*”>
모든 요소에 대해 이 템플릿이 적용됩니다. - <xsl:element name=”{name()}”>
현재 처리 중인 요소와 동일한 이름을 가진 새 요소를 생성합니다. 여기서 name() 함수는 현재 요소의 이름을 반환합니다.
- <xsl:template match=”*”>
- 속성 처리
- <xsl:for-each select=”@*”>
현재 요소의 모든 속성을 순회합니다. - 내부의 <xsl:element name=”{name()}”>와 <xsl:value-of select=”.”/>를 통해,
각 속성을 이름이 같은 새로운 요소로 변환하고, 그 안에 속성의 값을 텍스트로 삽입합니다.
즉, 기존의 속성이 자식 요소로 바뀌게 됩니다.
- <xsl:for-each select=”@*”>
- 자식 요소와 텍스트 노드 처리
- <xsl:apply-templates select=”*|text()”/>
현재 요소의 모든 자식 요소와 텍스트 노드를 재귀적으로 처리합니다.
- <xsl:apply-templates select=”*|text()”/>
요약하면, 이 스타일시트는 원래의 XML 요소들을 재생성하면서, 속성들은 해당 요소의 하위 요소로 전환하는 역할을 합니다. 예를 들어, 다음과 같은 XML:
1 2 3 4 5 |
<person id="123" name="홍길동"> <age>30</age> </person> |
변환 후에는 아래와 같이 출력될 수 있습니다:
1 2 3 4 5 6 7 |
<person> <id>123</id> <name>홍길동</name> <age>30</age> </person> |