次の XML があります。
<root>
<nodeLevel1>
<nodeType1>node type 1</nodeType1>
<nodeType2><rank>3</rank></nodeType2>
<nodeType2><rank>1</rank></nodeType2>
<nodeType2><rank>4</rank></nodeType2>
<nodeType2><rank>2</rank></nodeType2>
<nodeType3>node type 3</nodeType3>
</nodeLevel1>
</root>
次の XSLT を使用して、この XML を並べ替えます。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" omit-xml-declaration="no" indent="yes" media-type="text/html"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="nodeLevel1">
<xsl:copy>
<xsl:apply-templates select="node()|@*">
<xsl:sort select="rank" data-type="number" />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
結果は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<nodeLevel1>
<nodeType1>node type 1</nodeType1>
<nodeType3>node type 3</nodeType3>
<nodeType2>
<rank>1</rank>
</nodeType2>
<nodeType2>
<rank>2</rank>
</nodeType2>
<nodeType2>
<rank>3</rank>
</nodeType2>
<nodeType2>
<rank>4</rank>
</nodeType2>
</nodeLevel1>
</root>
問題は、すべての「nodeType2」が XML の正しい位置にないことです。「nodeType2」の前にノード「nodeType1」を保持し、「nodeType2」の後にノード「nodeType3」を保持するにはどうすればよいですか。(ソリューションでは、要素名「nodeType1」または「nodeType3」を使用しないでください。これは、任意の名前に変更できるためです)
したがって、結果は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<nodeLevel1>
<nodeType1>node type 1</nodeType1>
<nodeType2>
<rank>1</rank>
</nodeType2>
<nodeType2>
<rank>2</rank>
</nodeType2>
<nodeType2>
<rank>3</rank>
</nodeType2>
<nodeType2>
<rank>4</rank>
</nodeType2>
<nodeType3>node type 3</nodeType3>
</nodeLevel1>
</root>
ご協力いただきありがとうございます。