이 변환을 :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="contactGrp">
<xsl:copy>
<xsl:apply-templates select="node()|@*">
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
,
제공되는 XML 문서에 적용 :
<contactGrp name="People"> <contactGrp name="Developers"> <customer name="Brad" /> <customer name="Mike" /> <customer name="Smith" /> </contactGrp> <contactGrp name="QA"> <customer name="abi" /> <customer name="John" /> </contactGrp> </contactGrp>
이주의 마십시오 :
<contactGrp name="People">
<contactGrp name="Developers">
<customer name="Mike" ></customer>
<customer name="Brad" ></customer>
<customer name="Smith" ></customer>
</contactGrp>
<contactGrp name="QA">
<customer name="John" ></customer>
<customer name="abi" ></customer>
</contactGrp>
</contactGrp>
이 원하는, 올바른 결과를 생산하는 올바른 결과는 항상 생산 될 것이다 - 요소의 중첩 수준에 관계없이
'xpath' 태그 때문에 혼란 스러워요 ... 노드 집합을 선택하려면 XPath가 올바른 기술을 사용할 수 있습니다. 노드 집합을 올바르게 정렬하려면 XPath 엔진 호스트 언어가 필요합니다. XML 트리를 변환하려면 standar 리소스가 XSLT입니다. –
알다시피, 나는 내 문제를 해결할 수 없다. – vondip
좋은 질문입니다, +1. 'contactGrp' 요소의 모든 중첩 수준에서 작동하는 간단하고 쉬운 XSLT 솔루션에 대한 내 대답을 확인하십시오. :) –