ElektroStudios
ElektroStudios

Reputation: 20474

Sort XML document

I have an XML like this:

<?xml version="1.0" encoding="Windows-1252"?>
<!--XML Songs Database.-->
<Songs>
    <Song><Name>My Song 2.mp3</Name><Year>2007</Year><Genre>Dance</Genre><Bitrate>320</Bitrate><Length>04:55</Length><Size>4,80</Size></Song>
    <Song><Name>My Song 1.mp3</Name><Year>2009</Year><Genre>Electro</Genre><Bitrate>192</Bitrate><Length>06:44</Length><Size>8,43</Size></Song>
    <Song><Name>My Song 3.mp3</Name><Year>2008</Year><Genre>UK Hardcore</Genre><Bitrate>128</Bitrate><Length>05:12</Length><Size>4,20</Size></Song>
</Songs>

How I can reorder the list elements by their "Name" property to get an xml document like this:

<?xml version="1.0" encoding="Windows-1252"?>
<!--XML Songs Database.-->
<Songs>
    <Song><Name>My Song 1.mp3</Name><Year>2009</Year><Genre>Electro</Genre><Bitrate>192</Bitrate><Length>06:44</Length><Size>8,43</Size></Song>
    <Song><Name>My Song 2.mp3</Name><Year>2007</Year><Genre>Dance</Genre><Bitrate>320</Bitrate><Length>04:55</Length><Size>4,80</Size></Song>
    <Song><Name>My Song 3.mp3</Name><Year>2008</Year><Genre>UK Hardcore</Genre><Bitrate>128</Bitrate><Length>05:12</Length><Size>4,20</Size></Song>
</Songs> 

This is what I'm trying... :

Dim xml As XDocument = XDocument.Load(xmlfile)
Dim Elements As IEnumerable(Of XElement) = xml.Descendants()

xml = Elements.OrderBy(Function(name) name...)

Upvotes: 0

Views: 1812

Answers (1)

decPL
decPL

Reputation: 5402

Brute, but simple approach:

xml.Root.ReplaceNodes(xml.Root.Elements("Song") _
                              .OrderBy(Function (s) s.Element("Name").Value))

Upvotes: 3

Related Questions