public void EditLoadedDocumentWithNamespaceAndPrefix()
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml(
                @"<ns0:root xmlns:ns0=""http://www.icsm.org/icsmxml"">
    <ns0:a id='1'>
        <ns0:b id='9'>asdf</ns0:b>
    </ns0:a>
    <ns0:a id='2'>
        <ns0:b id='8'>qwer</ns0:b>
    </ns0:a>
    <ns0:a id='3'>
        <ns0:b id='4'>zxcv</ns0:b>
    </ns0:a>
</ns0:root>"
                );
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer(doc);

            docAlter.AddNamespace("ns0", "http://www.icsm.org/icsmxml");
            docAlter.SetValue(new Expression("/root/a[@id=1]/b/@t", "ns0"), "6");
            docAlter.SetValue(new Expression("/root/a[2]/@id", "ns0"), "somtig");
            docAlter.SetValue(new Expression("/root/a[@id='3']/b[@id=4]/c", "ns0"), "workit");
            Assert.AreEqual("6", docAlter.GetValue(new Expression("/root/a[1]/b/@t", "ns0"), FailureReaction.Ignore));
            Assert.AreEqual("somtig", docAlter.GetValue(new Expression("/root/a[2]/@id", "ns0"), FailureReaction.Ignore));
            Assert.AreEqual("workit", docAlter.GetValue(new Expression("/root/a[3]/b/c", "ns0"), FailureReaction.Ignore));
        }
        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 AddingANamespaceAddsItToTheDocument()
        {
            XmlDocumentAlterer docAlterer = new XmlDocumentAlterer();

            docAlterer.AddNamespace("ns0", "http://www.ns0.com");
            docAlterer.FillIn(new Expression("/root/a/b/c"));
            docAlterer.FillIn(new Expression("/root/a/b/d"));
            docAlterer.FillIn(new Expression("/root/a/b/e"));
            docAlterer.FillIn(new Expression("/root/a/f/g"));
            docAlterer.FillIn(new Expression("/root/a/f/h"));
            docAlterer.FillIn(new Expression("/root/a/f/i"));
        }
        public void EditDocument_2()
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml(
                @"<?xml version=""1.0"" encoding=""utf-8""?>
<ICSMXML  xmlns:xsd=""http://www.w3.org/2001/XMLSchema""
		 xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
		 xmlns=""http://www.icsm.com/icsmxml"">
    <Request deploymentMode=""test"">
        <OrderRequest>
            <OrderRequestHeader orderDate=""2007-05-24""
								dueDate=""2007-05-27""
								orderID=""1203074043""
								type=""new""
								orderType=""regular""
								shippingType=""header""
								billCustomer=""no"">
                <CustomerIdentification>
					<CustomerInfo name=""AccountNumber"">0</CustomerInfo>
					<CustomerInfo name=""CustomerPONumber"">1</CustomerInfo>
					<CorporateInfo name=""AccountNumber"">254490</CorporateInfo>
					<CorporateInfo name=""PurchaseOrder""></CorporateInfo>
					<CorporateInfo name=""StoreNumber"">9999</CorporateInfo>
				</CustomerIdentification>
            </OrderRequestHeader>
        </OrderRequest>
    </Request>
</ICSMXML>"
                );
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer(doc);

            docAlter.AddNamespace("ns0", "http://www.icsm.com/icsmxml");
            Expression xpath = new Expression("/ICSMXML/Request/OrderRequest/OrderRequestHeader/CustomerIdentification/CorporateInfor[@name=SourceCode]", "ns0");

            docAlter.SetValue(xpath, "XYZ");
            Assert.AreEqual("XYZ", docAlter.GetValue(xpath, FailureReaction.Ignore));
        }
        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);
        }