I have a following XML code:
<Group>
<GElement code="x">
<Group>
<GElement code="x">
<fname>a</fname>
<lname>b</lname>
</GElement>
<GElement code ="f">
<fname>fa</fname>
</GElement>
</Group>
</GElement>
<GElement code ="f">
</GElement>
</Group>
I would like to have the output sorted by "code" like:
<Group>
<GElement code ="f">
</GElement>
<GElement code="x">
<Group>
<GElement code ="f">
<fname>fa</fname>
</GElement>
<GElement code="x">
<fname>a</fname>
<lname>b</lname>
</GElement>
</Group>
</GElement>
</Group>
The depth of the tree can be endless i.e. the GElement can have another Group and so on.
Any ideas?
Use XslCompiledTransform (see MSDN) to apply this styleshet to your XML document:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<!-- the identity template copies everything verbatim -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<!-- special template for <Group> that sorts its children -->
<xsl:template match="Group">
<xsl:copy>
<xsl:copy-of select="@*" /> <!-- copy attributes, if any -->
<xsl:apply-templates select="GElement">
<xsl:sort select="@code" />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
XML tree nesting depth can be arbitrary.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With