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 EditLoadedDocument()
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml(
                @"<root>
    <a id='1'>
        <b id='9'>asdf</b>
    </a>
    <a id='2'>
        <b id='8'>qwer</b>
    </a>
    <a id='3'>
        <b id='4'>zxcv</b>
    </a>
</root>"
                );
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer(doc);

            docAlter.SetValue(new Expression("/root/a[@id=1]/b/@t"), "6");
            docAlter.SetValue(new Expression("/root/a[2]/@id"), "somtig");
            docAlter.SetValue(new Expression("/root/a[@id='3']/b[@id=4]/c"), "workit");
            Assert.AreEqual("6", docAlter.GetValue(new Expression("/root/a[1]/b/@t"), FailureReaction.Ignore));
            Assert.AreEqual("somtig", docAlter.GetValue(new Expression("/root/a[2]/@id"), FailureReaction.Ignore));
            Assert.AreEqual("workit", docAlter.GetValue(new Expression("/root/a[3]/b/c"), FailureReaction.Ignore));
        }
        public void CreateElementWithRelativePath()
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml(@"<root>
    <a type='a_1'>
        <b>zxcv</b>
        <b>yuiop</b>
    </a>
    <a type='a_2'>
        <b>hjkl</b>
        <b>qwert</b>
    </a>
</root>");
            Assert.AreEqual(4, doc.SelectNodes("/root//b").Count);
            XmlDocumentAlterer alter = new XmlDocumentAlterer(doc);

            Assert.AreEqual(4, alter.CountNodes(new Expression("/root//b")));
            Assert.AreEqual("hjkl", alter.GetValue("/root//b[3]", FailureReaction.Ignore));

            Expression xpath = new Expression("/root//b[3]/../c");

            alter.SetValue(xpath, "qqq");

            Expression xpath2 = new Expression("/root/a[@type='a_2']/c");

            Assert.AreEqual("qqq", alter.GetValue(xpath2, FailureReaction.Ignore));
        }
        public void SetValueFromStringExpression()
        {
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer();

            docAlter.SetValue("/root/a", "abc");
            Assert.AreEqual("abc", docAlter.GetValue(new Expression("/root/a"), FailureReaction.Ignore));
        }
        public void Set_GetValue()
        {
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer();
            Expression         xpath    = new Expression("/root/a");
            string             value    = "gah";

            docAlter.SetValue(xpath, value);
            Assert.AreEqual(value, docAlter.GetValue(xpath, FailureReaction.Ignore));
        }
        public void SetValue_2()
        {
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer();
            Expression         xpath    = new Expression("/root/a[@id='1']/b");
            string             value    = "sup";

            docAlter.SetValue(xpath, value);
            XmlNode node = docAlter.SelectNodes(xpath)[0];

            Assert.AreEqual(value, node.InnerText);
        }
        public void SetValueInMultipleNodesWithFillInDeep()
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml("<root><a></a><a></a></root>");
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer(doc);
            Expression         xpath    = new Expression("/root/a/b/c/e/@d");

            docAlter.SetValue(xpath, "x");
            XmlNodeList nodes = doc.SelectNodes(xpath.ToString());

            Assert.AreEqual(2, nodes.Count);
            Assert.AreEqual("x", nodes[0].InnerText, "first node");
            Assert.AreEqual("x", nodes[1].InnerText, "second node");
        }
        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));
        }