public void IsValidAfterSorting()
        {
            XmlDocument schemaDoc = new XmlDocument();

            schemaDoc.LoadXml(
                @"<?xml version=""1.0"" encoding=""utf-8""?>
<xsd:schema xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns=""http://www.what.com"" targetNamespace=""http://www.what.com"">
    <xsd:element name=""root"">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref=""a""/>
                <xsd:element ref=""b""/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name=""a"">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref=""c""/>
                <xsd:element ref=""d""/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name=""b"" type=""xsd:string""/>
    <xsd:element name=""c"" type=""xsd:string""/>
    <xsd:element name=""d"" type=""xsd:string""/>

</xsd:schema>");
            XmlSchema schema = null;

            using (MemoryStream memBuf = new MemoryStream())
            {
                schemaDoc.Save(memBuf);
                memBuf.Flush();
                memBuf.Position = 0;
                schema          = XmlSchema.Read(memBuf, null);
                memBuf.Close();
            }
            XmlDocument doc = new XmlDocument();

            doc.LoadXml(
                @"<?xml version=""1.0"" encoding=""utf-8""?>
<root xmlns=""http://www.what.com"">
    <b>test1</b>
    <a>
        <d>test2</d>
        <c>test3</c>
    </a>
</root>");

            XmlDocumentAlterer docAlter = new XmlDocumentAlterer(doc, schema);

            docAlter.AddNamespace("ns0", "http://www.what.com");
            docAlter.SortElements();
            Assert.IsTrue(docAlter.IsValid, "not valid");
        }
        public void RearrangeWithSchema()
        {
            XmlDocument schemaDoc = new XmlDocument();

            schemaDoc.LoadXml(
                @"<?xml version=""1.0"" encoding=""utf-8""?>
<xsd:schema xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
    <xsd:element name=""root"">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref=""a""/>
                <xsd:element ref=""b""/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name=""a"">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref=""c""/>
                <xsd:element ref=""d""/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name=""b"" type=""xsd:string""/>
    <xsd:element name=""c"" type=""xsd:string""/>
    <xsd:element name=""d"" type=""xsd:string""/>

</xsd:schema>");
            XmlSchema schema = null;

            using (MemoryStream memBuf = new MemoryStream())
            {
                schemaDoc.Save(memBuf);
                memBuf.Flush();
                memBuf.Position = 0;
                schema          = XmlSchema.Read(memBuf, null);
                memBuf.Close();
            }
            XmlDocument doc = new XmlDocument();

            doc.LoadXml(
                @"<?xml version=""1.0"" encoding=""utf-8""?>
<root xmlns=""http://www.what.com"">
    <b>test1</b>
    <a>
        <d>test2</d>
        <c>test3</c>
    </a>
</root>");

            XmlDocumentAlterer docAlter = new XmlDocumentAlterer(doc, schema);

            docAlter.AddNamespace("ns0", "http://www.what.com");
            docAlter.SortElements();
            Assert.AreEqual("a", doc.DocumentElement.ChildNodes[0].Name);
            Assert.AreEqual("c", doc.DocumentElement.ChildNodes[0].ChildNodes[0].Name);
            Assert.AreEqual("test3", doc.DocumentElement.ChildNodes[0].ChildNodes[0].InnerText);
            Assert.AreEqual("d", doc.DocumentElement.ChildNodes[0].ChildNodes[1].Name);
            Assert.AreEqual("test2", doc.DocumentElement.ChildNodes[0].ChildNodes[1].InnerText);
            Assert.AreEqual("b", doc.DocumentElement.ChildNodes[1].Name);
            Assert.AreEqual("test1", doc.DocumentElement.ChildNodes[1].InnerText);
        }