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

            doc.LoadXml(
                @"<root>
    <a type='3'/>
    <a>
        <b>d</b>
    </a>
    <a>
        <c type='z_val'/>
    </a>
    <a>
        <b>x</b>
        <c>
            <d type='x_val'/>
        </c>
    </a>
    <a>
        <b>y</b>
        <c>
            <d type='y_val'/>
        </c>
    </a>
</root>");
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer(doc);
            Expression         exp      = new Expression("/root//d[2]/@type");
            Expression         xpath    = new Expression("/root//d[2]/parent::*/parent::*/b");

            Assert.AreEqual("y_val", docAlter.GetValue(exp, FailureReaction.Ignore));
            Assert.AreEqual("y", docAlter.GetValue(xpath, 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 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 SetValueFromStringExpression()
        {
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer();

            docAlter.SetValue("/root/a", "abc");
            Assert.AreEqual("abc", docAlter.GetValue(new Expression("/root/a"), FailureReaction.Ignore));
        }
        public void RetrieveValueWithEmpty()
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml("<root><a>asdf</a></root>");
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer(doc);

            Assert.AreEqual("asdf", docAlter.GetValue("/root/a", FailureReaction.GenerateErrorOnEmpty));
        }
        public void RetrieveNullWithEmpty()
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml("<root></root>");
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer(doc);

            Assert.IsNull(docAlter.GetValue("/root/a", FailureReaction.GenerateErrorOnEmpty));
        }
        public void RetrieveEmptyWithNull()
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml("<root><a/></root>");
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer(doc);

            Assert.AreEqual(0, docAlter.GetValue("/root/a", FailureReaction.GenerateErrorOnNull).Length);
        }
        public void RetrieveNullWithIgnore()
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml("<root></root>");
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer(doc);

            Assert.IsNull(docAlter.GetValue("/root/a", FailureReaction.Ignore));
        }
        public void GetValueFromStingExpression()
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml("<root><a>asdf</a></root>");
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer(doc);

            Assert.AreEqual("asdf", docAlter.GetValue("/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 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 GetValue_null()
        {
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer();

            Assert.IsNull(docAlter.GetValue(new Expression("/root/a/b"), FailureReaction.Ignore));
        }