XmlDocument rearrange XmlNodes C#

I have an XML Document that stores all sorts of information about users of a system. Utlimately, the nodes that I am intersted in I hae outined below.

So, there is a user that has many user contents - I have included just books as an example.

<?xml version="1.0" encoding="UTF-8"?>
<user>
  <userProperties>
    <alias val="userAliasOne"/>
    <id val="3423423"/>
  </userProperties>
  <userContent>
    <userBooks>
      <genre>
        <book>
          <title>Dummy Value</title>
        </book>
      </genre>
    </userBooks>
  </userContent>
</user>

I need to somehow restructure the XML, using XmlDocument and XmlNode so that it matches the below. (userBooks to become root node but all contents of userBooks - /genre/book/title - to stay inside userContent).

<?xml version="1.0" encoding="UTF-8"?>
<userBooks>
  <user>
    <userProperties>
      <alias val="userAliasOne"/>
      <id val="3423423"/>
    </userProperties>
    <userContent>
      <genre>
        <book>
          <title>Dummy Value</title>
        </book>
      </genre>
    </userContent>
  </user>
</userBooks>

I've tried selecting the single nodes and cloning them, then appending the clone to the parent and removing the child that's no longer required. It became very long and convoluted and I couldn't get it to work. There must be a more elegant solution that I am not aware of.

Any help appreciated.

Thanks.

Jon Skeet
people
quotationmark

Here's an example for adding a new root element:

using System;
using System.Xml;

class Test
{
    static void Main()
    {
        XmlDocument doc = new XmlDocument();
        doc.Load("test.xml");
        var originalRoot = doc.DocumentElement;
        doc.RemoveChild(originalRoot);
        var newRoot = doc.CreateElement("userBooks");
        doc.AppendChild(newRoot);
        newRoot.AppendChild(originalRoot);
        doc.Save(Console.Out);
    }
}

Try using the same approach for "removing" the userBooks element in the original - remove the element from its parent, but then add all the child nodes (of userBooks) as new child nodes of the original parent of userBooks.

people

See more on this question at Stackoverflow