So you have a third-party web service that likes to abuse XML and return things in an order that makes your programming a complete pain in the neck. For example...
<file>
<node1>Foo</node1>
<price>4.99</price>
<node2>
<key>XX999</key>
</node2>
</file>
There are about a thousand of these sorted in order by price.
How can you re-sort this XML document by the key value?
I need the result to be a sorted XML file. Thanks!
EDIT: .NET version 2.0 (no LINQ)
Here's how to do it with XSLT:
assuming your data takes this form (file.xml):
<?xml version="1.0"?>
<listing>
<file>
<node1>Foo</node1>
<price>4.99</price>
<node2>
<key>XX999</key>
</node2>
</file>
<file>
<node1>Bar</node1>
<price>5.67</price>
<node2>
<key>aa743</key>
</node2>
</file>
<file>
<node1>Was</node1>
<price>5.67</price>
<node2>
<key>rr321</key>
</node2>
</file>
</listing>
This transform (stylesheet.xsl):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="listing">
<xsl:copy>
<xsl:apply-templates select="file">
<xsl:sort select="node2/key" data-type="text"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
When used with this .Net code (need to add a using System.Xml;):
XslCompiledTransform xslt= new XslCompiledTransform();
xslt.Load(@"c:\stylesheet.xsl");
xslt.Transform(@"C:\file.xml", @"c:\sorted.xml");
Results in this output in sorted.xml:
<?xml version="1.0" encoding="utf-8"?>
<listing>
<file>
<node1>Bar</node1>
<price>5.67</price>
<node2>
<key>aa743</key>
</node2>
</file>
<file>
<node1>Was</node1>
<price>5.67</price>
<node2>
<key>rr321</key>
</node2>
</file>
<file>
<node1>Foo</node1>
<price>4.99</price>
<node2>
<key>XX999</key>
</node2>
</file>
</listing>
Apply an Xml Style Sheet to transform to source XML into an XML format suitable for your use. You can easily sort elements by values during the xsl transformation.
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