私はこのようなXML構造を持っています-
<Root>
<name rank = "1">ABC
<name rank ="1">BCD</name>
</name>
<name rank ="0">XYZ
<name rank ="1">BCD</name>
<name rank ="3">YYZ</name>
<name rank ="0">FEG</name>
<name rank ="0">DEG</name>
</name>
</Root>
このXMLをコピーして階層を保持し、(1)ランク(昇順)で並べ替える(2)ランクが等しい場合は、名前(昇順)で並べ替えて変換したい
変換後の構造は次のようになります。
<Root>
<name rank ="0">XYZ
<name rank ="0">DEG</name>
<name rank ="0">FEG</name>
<name rank ="1">BCD</name>
<name rank ="3">YYZ</name>
</name>
<name rank = "1">ABC
<name rank ="1">BCD</name>
</name>
</Root>
私は次のXSLを持っていますが、これは階層を保持していないか、正しい並べ替えを提供します。誰かが私を助けてくれますか?XSLを使用するのはこれが初めてであり、正しい方向へのヘルプやポインタをいただければ幸いです。
<xsl:template match="/*">
<xsl:copy>
<xsl:for-each select="//name">
<xsl:sort select="@rank" data-type="number" order="ascending"/>
<xsl:sort select="name" order="ascending" />
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:template>