Csharp/CSharp Tutorial/XML/XPath — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
Admin (обсуждение | вклад) м (1 версия) |
(нет различий)
|
Текущая версия на 15:17, 26 мая 2010
Содержание
- 1 Append child from XPathNavigator
- 2 Append new node to XPathNavigator
- 3 Compile XPath to create XPathExpression
- 4 Create XPathNavigator
- 5 Move to first child in XPathNavigator
- 6 Read sub tree from XPathNavigator
- 7 Select All Author Nodes
- 8 Select All Books
- 9 Select All Child Nodes
- 10 Select node with asterisk
- 11 Select XPath from XPathNavigator
- 12 Set new value through XPathNavigator
- 13 Show innter xml and outer xml from XPathNavigator
- 14 Sorting XPathExpression with XmlSortOrder.Ascending, XmlCaseOrder.None
- 15 Using XPathExpression to sort by first name
- 16 Using XPathNavigator to loop through code
- 17 Using XPathNodeIterator
- 18 Using XPath to filter data from Database
- 19 Xpath Demo: //attribute[@name="capacity"] | //attribute[@name="weight"]
- 20 Xpath Demo: /items/item
- 21 Xpath Demo: /items/item[2]
- 22 Xpath Demo: /items/item/attribute[@value > 10 and @name="weight"]
- 23 XPath Navigator
- 24 XPathNavigator and TreeView
- 25 XPath Node Iterator
- 26 XPath Selecting: /Customers/Customer[@FirstName="D"]
- 27 XPath selecting: descendant::Customer[attribute::FirstName="D"]
- 28 XPath selecting: descendant::Customer[contains(EmailAddress, "a.com")]
- 29 XPath selecting: descendant::Customer[EmailAddress="k@a.com"]
- 30 XPath selecting: descendant::Customer[@FirstName="D"]
- 31 XPath selecting: descendant::Customer[starts-with(@LastName, "G") and contains(EmailAddress, "a.com")]
- 32 XPath selecting: descendant::EmailAddress[text()="k@a.com"]
- 33 XPath Select Nodes
- 34 XPath XSLT transformation
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; using System.Xml.XPath;
public class MainClass { public static void Main() { XmlDocument doc; XPathNavigator editor2; XmlWriter writer; doc = new XmlDocument(); doc.Load("pubs.xml"); foreach(XPathNavigator editor in doc.CreateNavigator().Select("/pubs/titles[authors/@au_lname="Green"]")) { editor2 = editor.SelectSingleNode("authors[@au_lname!="Green"]"); if (editor2!=null) editor2.DeleteSelf(); writer = editor.AppendChild(); writer.WriteStartElement("authors"); writer.WriteAttributeString("au_lname", "A"); writer.WriteAttributeString("au_fname", "B"); writer.Close(); } doc.Save("output.xml"); } }</source>
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; using System.Xml.XPath;
public class MainClass { public static void Main() { XmlDocument doc; XPathNavigator editor2; XmlWriter writer; doc = new XmlDocument(); doc.Load("pubs.xml"); doc.CreateNavigator().Select("/pubs/titles[authors/@au_lname="Green"]"); foreach(XPathNavigator editor in doc.CreateNavigator().Select("/pubs/titles[authors/@au_lname="Green"]")) { editor2 = editor.SelectSingleNode("authors[@au_lname!="Green"]"); if (editor2!=null) editor2.DeleteSelf(); writer = editor.AppendChild(); writer.WriteStartElement("authors"); writer.WriteAttributeString("au_lname", "A"); writer.WriteAttributeString("au_fname", "B"); writer.Close(); } doc.Save("output.xml"); } }</source>
Compile XPath to create XPathExpression
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; using System.Xml.XPath;
public class MainClass { public static void Main() { XPathDocument doc = new XPathDocument(Application.StartupPath + @"\employees.xml"); XPathNavigator navigator = doc.CreateNavigator(); XPathExpression expression = navigator.rupile("xpath"); XPathNodeIterator iterator = navigator.Select(expression); try { Console.WriteLine("The expressions returned " + iterator.Count + " nodes"); if (iterator.Count > 0) { while (iterator.MoveNext()) { Console.WriteLine(iterator.Current.OuterXml); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } } }</source>
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; using System.Xml.XPath;
public class MainClass { public static void Main() { XPathNavigator navigator = null; XmlDocument doc = new XmlDocument(); doc.Load(Application.StartupPath + @"/employees.xml"); navigator = doc.CreateNavigator(); //XPathDocument doc = new XPathDocument(Application.StartupPath + @"/employees.xml"); //navigator = doc.CreateNavigator(); } }</source>
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; using System.Xml.XPath;
public class MainClass { public static void Main() { XPathDocument doc=new XPathDocument(Application.StartupPath + @"\employees.xml"); XPathNavigator navigator = doc.CreateNavigator(); XPathNavigator result=navigator.SelectSingleNode(@"employees/employee[@employeeid=1]"); result.MoveToFirstChild(); do { switch (result.Name) { case "firstname": Console.WriteLine(result.Value); break; case "lastname": Console.WriteLine(result.Value); break; case "homephone": Console.WriteLine(result.Value); break; case "notes": Console.WriteLine(result.Value); break; } } while (result.MoveToNext()); } }</source>
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; using System.Xml.XPath;
public class MainClass { public static void Main() { XPathDocument doc=new XPathDocument(Application.StartupPath + @"\employees.xml"); XPathNavigator navigator = doc.CreateNavigator(); navigator.MoveToRoot(); navigator.MoveToFirstChild(); while (navigator.MoveToNext()) { navigator.MoveToFirstChild(); do { string id = navigator.GetAttribute("employeeid", ""); if (id == "1") { XmlReader reader=navigator.ReadSubtree(); DisplayDetails(reader); } } while (navigator.MoveToNext()); } } private static void DisplayDetails(XmlReader reader) { while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { switch (reader.Name) { case "firstname": Console.WriteLine(reader.ReadString()); break; case "lastname": Console.WriteLine(reader.ReadString()); break; case "homephone": Console.WriteLine(reader.ReadString()); break; case "notes": Console.WriteLine(reader.ReadString()); break; } } } reader.Close(); } }</source>
Select All Author Nodes
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Xml; public class MainClass {
public static void Main() { XmlDocument mDocument = new XmlDocument(); XmlNode mCurrentNode; mDocument.Load("XPathQuery.xml"); mCurrentNode = mDocument.DocumentElement.SelectSingleNode("//books"); XmlNodeList nodeList = mCurrentNode.SelectNodes("//book/author"); DisplayList(nodeList); } static void DisplayList(XmlNodeList nodeList) { foreach (XmlNode node in nodeList) { RecurseXmlDocumentNoSiblings(node); } } static void RecurseXmlDocumentNoSiblings(XmlNode root) { if (root is XmlElement) { Console.WriteLine(root.Name); if (root.HasChildNodes) RecurseXmlDocument(root.FirstChild); } else if (root is XmlText) { string text = ((XmlText)root).Value; Console.WriteLine(text); } else if (root is XmlComment) { string text = root.Value; Console.WriteLine(text); if (root.HasChildNodes) RecurseXmlDocument(root.FirstChild); } } static void RecurseXmlDocument(XmlNode root) { if (root is XmlElement) { Console.WriteLine(root.Name); if (root.HasChildNodes) RecurseXmlDocument(root.FirstChild); if (root.NextSibling != null) RecurseXmlDocument(root.NextSibling); } else if (root is XmlText) { string text = ((XmlText)root).Value; Console.WriteLine(text); } else if (root is XmlComment) { string text = root.Value; Console.WriteLine(text); if (root.HasChildNodes) RecurseXmlDocument(root.FirstChild); if (root.NextSibling != null) RecurseXmlDocument(root.NextSibling); } }
}</source>
Select All Books
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Xml; public class MainClass {
public static void Main() { XmlDocument mDocument = new XmlDocument(); XmlNode mCurrentNode; mDocument.Load("XPathQuery.xml"); mCurrentNode = mDocument.DocumentElement; XmlNodeList nodeList = mCurrentNode.SelectNodes("//book"); DisplayList(nodeList); } static void DisplayList(XmlNodeList nodeList) { foreach (XmlNode node in nodeList) { RecurseXmlDocumentNoSiblings(node); } } static void RecurseXmlDocumentNoSiblings(XmlNode root) { if (root is XmlElement) { Console.WriteLine(root.Name); if (root.HasChildNodes) RecurseXmlDocument(root.FirstChild); } else if (root is XmlText) { string text = ((XmlText)root).Value; Console.WriteLine(text); } else if (root is XmlComment) { string text = root.Value; Console.WriteLine(text); if (root.HasChildNodes) RecurseXmlDocument(root.FirstChild); } } static void RecurseXmlDocument(XmlNode root) { if (root is XmlElement) { Console.WriteLine(root.Name); if (root.HasChildNodes) RecurseXmlDocument(root.FirstChild); if (root.NextSibling != null) RecurseXmlDocument(root.NextSibling); } else if (root is XmlText) { string text = ((XmlText)root).Value; Console.WriteLine(text); } else if (root is XmlComment) { string text = root.Value; Console.WriteLine(text); if (root.HasChildNodes) RecurseXmlDocument(root.FirstChild); if (root.NextSibling != null) RecurseXmlDocument(root.NextSibling); } }
}</source>
Select All Child Nodes
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Xml; public class MainClass {
public static void Main() { XmlDocument mDocument = new XmlDocument(); XmlNode mCurrentNode; mDocument.Load("XPathQuery.xml"); mCurrentNode = mDocument.DocumentElement;
XmlNodeList nodeList = mCurrentNode.SelectNodes("*"); DisplayList(nodeList); } static void DisplayList(XmlNodeList nodeList) { foreach (XmlNode node in nodeList) { RecurseXmlDocumentNoSiblings(node); } } static void RecurseXmlDocumentNoSiblings(XmlNode root) { if (root is XmlElement) { Console.WriteLine(root.Name); if (root.HasChildNodes) RecurseXmlDocument(root.FirstChild); } else if (root is XmlText) { string text = ((XmlText)root).Value; Console.WriteLine(text); } else if (root is XmlComment) { string text = root.Value; Console.WriteLine(text); if (root.HasChildNodes) RecurseXmlDocument(root.FirstChild); } } static void RecurseXmlDocument(XmlNode root) { if (root is XmlElement) { Console.WriteLine(root.Name); if (root.HasChildNodes) RecurseXmlDocument(root.FirstChild); if (root.NextSibling != null) RecurseXmlDocument(root.NextSibling); } else if (root is XmlText) { string text = ((XmlText)root).Value; Console.WriteLine(text); } else if (root is XmlComment) { string text = root.Value; Console.WriteLine(text); if (root.HasChildNodes) RecurseXmlDocument(root.FirstChild); if (root.NextSibling != null) RecurseXmlDocument(root.NextSibling); } }
}</source>
Select node with asterisk
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Xml; public class MainClass {
public static void Main() { XmlDocument mDocument = new XmlDocument(); XmlNode mCurrentNode; mDocument.Load("XPathQuery.xml"); mCurrentNode = mDocument.DocumentElement; XmlNodeList nodeList = mCurrentNode.SelectNodes("*"); DisplayList(nodeList); } static void DisplayList(XmlNodeList nodeList) { foreach (XmlNode node in nodeList) { RecurseXmlDocumentNoSiblings(node); } } static void RecurseXmlDocumentNoSiblings(XmlNode root) { if (root is XmlElement) { Console.WriteLine(root.Name); if (root.HasChildNodes) RecurseXmlDocument(root.FirstChild); } else if (root is XmlText) { string text = ((XmlText)root).Value; Console.WriteLine(text); } else if (root is XmlComment) { string text = root.Value; Console.WriteLine(text); if (root.HasChildNodes) RecurseXmlDocument(root.FirstChild); } } static void RecurseXmlDocument(XmlNode root) { if (root is XmlElement) { Console.WriteLine(root.Name); if (root.HasChildNodes) RecurseXmlDocument(root.FirstChild); if (root.NextSibling != null) RecurseXmlDocument(root.NextSibling); } else if (root is XmlText) { string text = ((XmlText)root).Value; Console.WriteLine(text); } else if (root is XmlComment) { string text = root.Value; Console.WriteLine(text); if (root.HasChildNodes) RecurseXmlDocument(root.FirstChild); if (root.NextSibling != null) RecurseXmlDocument(root.NextSibling); } }
}</source>
<source lang="csharp">using System; using System.Collections.Generic; using System.IO; using System.Xml; using System.Xml.XPath;
public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public string EmailAddress { get; set; } public override string ToString() { return string.Format("{0} {1}\nEmail: {2}",FirstName, LastName, EmailAddress); } } public class Tester { static void Main() { List<Customer> customers = new List<Customer>{ new Customer { FirstName = "A", LastName = "G", EmailAddress = "o@a.ru"}, new Customer { FirstName = "B", LastName = "C", EmailAddress = "k@a.ru" }, new Customer { FirstName = "D", LastName = "C", EmailAddress = "d@a.ru" }, new Customer { FirstName = "E", LastName = "G", EmailAddress = "j@a.ru" }, new Customer { FirstName = "L", LastName = "H", EmailAddress = "l@a.ru" } }; XmlDocument customerXml = new XmlDocument(); XmlElement rootElem = customerXml.CreateElement("Customers"); customerXml.AppendChild(rootElem); foreach (Customer customer in customers) { XmlElement customerElem = customerXml.CreateElement("Customer"); XmlAttribute firstNameAttr = customerXml.CreateAttribute("FirstName"); firstNameAttr.Value = customer.FirstName; customerElem.Attributes.Append(firstNameAttr); XmlAttribute lastNameAttr = customerXml.CreateAttribute("LastName"); lastNameAttr.Value = customer.LastName; customerElem.Attributes.Append(lastNameAttr); XmlElement emailAddress = customerXml.CreateElement("EmailAddress"); emailAddress.InnerText = customer.EmailAddress; customerElem.AppendChild(emailAddress); rootElem.AppendChild(customerElem); }
XPathNavigator nav = customerXml.CreateNavigator(); string xPath = "descendant::Customer[starts-with(@LastName, "G") and contains(EmailAddress, "a.ru")]"; XPathNodeIterator iter = nav.Select(xPath); if (iter.Count > 0) { while (iter.MoveNext()) Console.WriteLine(iter.Current.OuterXml); } else Console.WriteLine("Customer not found");
} }</source>
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml;
public class MainClass { public static void Main() { XmlDocument doc; System.Xml.XPath.XPathNavigator editor; doc = new XmlDocument(); doc.Load("pubs.xml"); editor = doc.CreateNavigator().SelectSingleNode("/pubs/publishers[@pub_id="0736"]/@pub_name"); editor.SetValue("new"); doc.Save("output.xml"); } }</source>
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; using System.Xml.XPath;
public class MainClass { public static void Main() { XPathDocument doc=new XPathDocument(Application.StartupPath + @"\employees.xml"); XPathNavigator navigator = doc.CreateNavigator(); navigator.MoveToRoot(); navigator.MoveToFirstChild(); while (navigator.MoveToNext()) { MessageBox.Show(navigator.InnerXml); MessageBox.Show(navigator.OuterXml); } } }</source>
Sorting XPathExpression with XmlSortOrder.Ascending, XmlCaseOrder.None
<source lang="csharp">using System; using System.Collections.Generic; using System.IO; using System.Xml; using System.Xml.XPath;
public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public string EmailAddress { get; set; } public override string ToString() { return string.Format("{0} {1}\nEmail: {2}",FirstName, LastName, EmailAddress); } } public class Tester { static void Main() { List<Customer> customers = new List<Customer>{ new Customer { FirstName = "A", LastName = "G", EmailAddress = "o@a.ru"}, new Customer { FirstName = "B", LastName = "C", EmailAddress = "k@a.ru" }, new Customer { FirstName = "D", LastName = "C", EmailAddress = "d@a.ru" }, new Customer { FirstName = "E", LastName = "G", EmailAddress = "j@a.ru" }, new Customer { FirstName = "L", LastName = "H", EmailAddress = "l@a.ru" } }; XmlDocument customerXml = new XmlDocument(); XmlElement rootElem = customerXml.CreateElement("Customers"); customerXml.AppendChild(rootElem); foreach (Customer customer in customers) { XmlElement customerElem = customerXml.CreateElement("Customer"); XmlAttribute firstNameAttr = customerXml.CreateAttribute("FirstName"); firstNameAttr.Value = customer.FirstName; customerElem.Attributes.Append(firstNameAttr); XmlAttribute lastNameAttr = customerXml.CreateAttribute("LastName"); lastNameAttr.Value = customer.LastName; customerElem.Attributes.Append(lastNameAttr); XmlElement emailAddress = customerXml.CreateElement("EmailAddress"); emailAddress.InnerText = customer.EmailAddress; customerElem.AppendChild(emailAddress); rootElem.AppendChild(customerElem); }
XPathNavigator nav = customerXml.CreateNavigator(); string xPath = "descendant::Customer[starts-with(@LastName, "G") and contains(EmailAddress, "a.ru")]"; XPathNodeIterator iter = nav.Select(xPath); XPathExpression expr2 = nav.rupile(xPath); expr2.AddSort("@FirstName", XmlSortOrder.Ascending, XmlCaseOrder.None, string.Empty, XmlDataType.Text); iter = nav.Select(expr2); while (iter.MoveNext()) Console.WriteLine(iter.Current.OuterXml);
} }</source>
Using XPathExpression to sort by first name
<source lang="csharp">using System; using System.Collections.Generic; using System.IO; using System.Xml; using System.Xml.XPath;
public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public string EmailAddress { get; set; } public override string ToString() { return string.Format("{0} {1}\nEmail: {2}",FirstName, LastName, EmailAddress); } } public class Tester { static void Main() { List<Customer> customers = new List<Customer>{ new Customer { FirstName = "A", LastName = "G", EmailAddress = "o@a.ru"}, new Customer { FirstName = "B", LastName = "C", EmailAddress = "k@a.ru" }, new Customer { FirstName = "D", LastName = "C", EmailAddress = "d@a.ru" }, new Customer { FirstName = "E", LastName = "G", EmailAddress = "j@a.ru" }, new Customer { FirstName = "L", LastName = "H", EmailAddress = "l@a.ru" } }; XmlDocument customerXml = new XmlDocument(); XmlElement rootElem = customerXml.CreateElement("Customers"); customerXml.AppendChild(rootElem); foreach (Customer customer in customers) { XmlElement customerElem = customerXml.CreateElement("Customer"); XmlAttribute firstNameAttr = customerXml.CreateAttribute("FirstName"); firstNameAttr.Value = customer.FirstName; customerElem.Attributes.Append(firstNameAttr); XmlAttribute lastNameAttr = customerXml.CreateAttribute("LastName"); lastNameAttr.Value = customer.LastName; customerElem.Attributes.Append(lastNameAttr); XmlElement emailAddress = customerXml.CreateElement("EmailAddress"); emailAddress.InnerText = customer.EmailAddress; customerElem.AppendChild(emailAddress); rootElem.AppendChild(customerElem); }
XPathNavigator nav = customerXml.CreateNavigator(); string xPath = "descendant::Customer[starts-with(@LastName, "G") and contains(EmailAddress, "a.ru")]"; XPathNodeIterator iter = nav.Select(xPath); XPathExpression expr = nav.rupile(xPath); expr.AddSort("@FirstName", Comparer<String>.Default); iter = nav.Select(expr); while (iter.MoveNext()) Console.WriteLine(iter.Current.OuterXml); } }</source>
<source lang="csharp">using System; using System.Collections.Generic; using System.IO; using System.Xml; using System.Xml.XPath;
public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public string EmailAddress { get; set; } public override string ToString() { return string.Format("{0} {1}\nEmail: {2}",FirstName, LastName, EmailAddress); } } public class Tester { static void Main() { List<Customer> customers = new List<Customer>{ new Customer { FirstName = "A", LastName = "G", EmailAddress = "o@a.ru"}, new Customer { FirstName = "B", LastName = "C", EmailAddress = "k@a.ru" }, new Customer { FirstName = "D", LastName = "C", EmailAddress = "d@a.ru" }, new Customer { FirstName = "E", LastName = "G", EmailAddress = "j@a.ru" }, new Customer { FirstName = "L", LastName = "H", EmailAddress = "l@a.ru" } }; XmlDocument customerXml = new XmlDocument(); XmlElement rootElem = customerXml.CreateElement("Customers"); customerXml.AppendChild(rootElem); foreach (Customer customer in customers) { XmlElement customerElem = customerXml.CreateElement("Customer"); XmlAttribute firstNameAttr = customerXml.CreateAttribute("FirstName"); firstNameAttr.Value = customer.FirstName; customerElem.Attributes.Append(firstNameAttr); XmlAttribute lastNameAttr = customerXml.CreateAttribute("LastName"); lastNameAttr.Value = customer.LastName; customerElem.Attributes.Append(lastNameAttr); XmlElement emailAddress = customerXml.CreateElement("EmailAddress"); emailAddress.InnerText = customer.EmailAddress; customerElem.AppendChild(emailAddress); rootElem.AppendChild(customerElem); }
XPathNavigator nav = customerXml.CreateNavigator(); string xPath = "descendant::Customer[@FirstName="D"]"; XPathNavigator navNode = nav.SelectSingleNode(xPath); if (navNode != null) { Console.WriteLine(navNode.OuterXml); XmlElement elem = navNode.UnderlyingObject as XmlElement; if (elem != null) Console.WriteLine(elem.OuterXml); else Console.WriteLine("Found the wrong node!"); } else Console.WriteLine("Customer not found");
} }</source>
Using XPathNodeIterator
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; using System.Xml.XPath;
public class MainClass { public static void Main() { XPathDocument doc = new XPathDocument(Application.StartupPath + @"\employees.xml"); XPathNavigator navigator = doc.CreateNavigator(); XPathNodeIterator iterator=navigator.Select("your input"); try { Console.WriteLine("The expressions returned " + iterator.Count + " nodes"); if (iterator.Count > 0) { while (iterator.MoveNext()) { Console.WriteLine(iterator.Current.OuterXml); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } } }</source>
Using XPath to filter data from Database
<source lang="csharp">using System; using System.Data; using System.Data.SqlClient; using System.Xml; using System.IO; public class XPathSearch {
private static string connectionString = "Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI"; public static void Main() { string SQL = "SELECT CategoryID, CategoryName, Description FROM Categories"; SqlConnection con = new SqlConnection(connectionString); SqlCommand com = new SqlCommand(SQL, con); SqlDataAdapter adapter = new SqlDataAdapter(com); DataSet ds = new DataSet("Northwind"); con.Open(); adapter.FillSchema(ds, SchemaType.Mapped, "Categories"); adapter.Fill(ds, "Categories"); con.Close(); XmlDataDocument dataDoc = new XmlDataDocument(ds); string XPath; XPath = @"//Categories[starts-with(child::CategoryName, "A")]"; XmlNodeList nodes = dataDoc.DocumentElement.SelectNodes(XPath); foreach (XmlNode node in nodes) { foreach (XmlNode child in node.ChildNodes) { Console.WriteLine(child.InnerText); } } }
}</source>
Xpath Demo: //attribute[@name="capacity"] | //attribute[@name="weight"]
<source lang="csharp">using System; using System.Xml; using System.Collections.Generic; using System.Text;
class Program { static void Main(string[] args) { XmlDocument docItems = new XmlDocument(); docItems.Load("items.xml"); XmlNodeList cw = docItems.SelectNodes("//attribute[@name="capacity"] | //attribute[@name="weight"]"); Console.WriteLine("Heavy Items (descendant axis predicate):"); } }</source>
Xpath Demo: /items/item
<source lang="csharp">using System; using System.Xml; using System.Collections.Generic; using System.Text;
class Program { static void Main(string[] args) { XmlDocument docItems = new XmlDocument(); docItems.Load("items.xml"); XmlNodeList allItems = docItems.SelectNodes("/items/item"); Console.WriteLine("Found {0} items", allItems.Count); } }</source>
Xpath Demo: /items/item[2]
<source lang="csharp">using System; using System.Xml; using System.Collections.Generic; using System.Text;
class Program { static void Main(string[] args) { XmlDocument docItems = new XmlDocument(); docItems.Load("items.xml"); XmlNode thirdItem = docItems.SelectSingleNode("/items/item[2]"); Console.WriteLine("Third node is {0}", thirdItem.Attributes["name"].Value); } }</source>
Xpath Demo: /items/item/attribute[@value > 10 and @name="weight"]
<source lang="csharp">using System; using System.Xml; using System.Collections.Generic; using System.Text;
class Program { static void Main(string[] args) { XmlDocument docItems = new XmlDocument(); docItems.Load("items.xml"); XmlNodeList heavyAttribs = docItems.SelectNodes("/items/item/attribute[@value > 10 and @name="weight"]"); foreach (XmlNode heavyAttrib in heavyAttribs) { Console.WriteLine(heavyAttrib.ParentNode.Attributes["name"].Value); } } }</source>
<source lang="csharp">using System; using System.Xml.XPath;
class XPathNavigatorSample { [STAThread] static void Main(string[] args) { XPathDocument xpathDocument = new XPathDocument("../../sample.xml"); XPathNavigator xpathNavigator = xpathDocument.CreateNavigator(); xpathNavigator.MoveToRoot(); NavigateTree(xpathNavigator); } private static void NavigateTree (XPathNavigator xpathNavigator) { if (xpathNavigator.HasChildren) { xpathNavigator.MoveToFirstChild(); DisplayNode(xpathNavigator); NavigateTree(xpathNavigator); while (xpathNavigator.MoveToNext()) { DisplayNode(xpathNavigator); NavigateTree(xpathNavigator); } xpathNavigator.MoveToParent(); } } private static void DisplayNode (XPathNavigator xpathNavigator) { if (xpathNavigator.NodeType == XPathNodeType.Text) { Console.Out.WriteLine(xpathNavigator.Value); } else { Console.Out.Write(xpathNavigator.Name); if (xpathNavigator.HasAttributes) { int attributesCount = 1; while (xpathNavigator.MoveToNextAttribute()) { attributesCount ++; } Console.Out.Write(attributesCount); if (attributesCount != 1) { xpathNavigator.MoveToParent(); } } } } }</source>
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; using System.Xml.XPath;
public class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { XPathDocument doc = new XPathDocument(Application.StartupPath + @"\employees.xml"); XPathNavigator navigator = doc.CreateNavigator(); navigator.MoveToRoot(); navigator.MoveToFirstChild(); TreeNode root = treeView1.Nodes.Add("Employees"); while (navigator.MoveToNext()) { if (navigator.HasChildren) { navigator.MoveToFirstChild(); do { string id = navigator.GetAttribute("employeeid", ""); TreeNode empnode = new TreeNode("Employee ID :" + id); root.Nodes.Add(empnode); navigator.MoveToFirstChild(); do { string name = navigator.Name; TreeNode node = new TreeNode(name + " : " + navigator.Value); empnode.Nodes.Add(node); } while (navigator.MoveToNext()); navigator.MoveToParent(); } while (navigator.MoveToNext()); } } } private void InitializeComponent() { this.button1 = new System.Windows.Forms.Button(); this.treeView1 = new System.Windows.Forms.TreeView(); this.SuspendLayout(); // // button1 // this.button1.Location = new System.Drawing.Point(120, 224); this.button1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(100, 28); this.button1.TabIndex = 0; this.button1.Text = "Load Tree"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); // // treeView1 // this.treeView1.Dock = System.Windows.Forms.DockStyle.Top; this.treeView1.Location = new System.Drawing.Point(0, 0); this.treeView1.Name = "treeView1"; this.treeView1.Size = new System.Drawing.Size(329, 216); this.treeView1.TabIndex = 1; // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(329, 262); this.Controls.Add(this.treeView1); this.Controls.Add(this.button1); this.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.Name = "Form1"; this.Text = "Form1"; this.Load += new System.EventHandler(this.Form1_Load); this.ResumeLayout(false); }
private System.Windows.Forms.Button button1; private System.Windows.Forms.TreeView treeView1; [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } }</source>
XPath Node Iterator
<source lang="csharp">using System; using System.Xml.XPath;
class MainClass{ static void Main(string[] args) { XPathDocument xpathDocument = new XPathDocument("sample.xml"); XPathNavigator xpathNavigator = xpathDocument.CreateNavigator(); XPathNodeIterator xpathNodeIterator = xpathNavigator.Select("//companies/cell-phone[last()]"); int i = 0; Console.Out.WriteLine(xpathNodeIterator.Count); while (xpathNodeIterator.MoveNext()) { Console.Out.WriteLine((++i) + ". Name: <" + xpathNodeIterator.Current.Name + ">. Value: " + xpathNodeIterator.Current.Value + "."); } } }</source>
XPath Selecting: /Customers/Customer[@FirstName="D"]
<source lang="csharp">using System; using System.Collections.Generic; using System.IO; using System.Xml;
public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public string EmailAddress { get; set; } public override string ToString() { return string.Format("{0} {1}\nEmail: {2}",FirstName, LastName, EmailAddress); } } public class Tester { static void Main() { List<Customer> customers = new List<Customer>{ new Customer { FirstName = "A", LastName = "G", EmailAddress = "o@a.ru"}, new Customer { FirstName = "B", LastName = "C", EmailAddress = "k@a.ru" }, new Customer { FirstName = "D", LastName = "C", EmailAddress = "d@a.ru" }, new Customer { FirstName = "E", LastName = "G", EmailAddress = "j@a.ru" }, new Customer { FirstName = "L", LastName = "H", EmailAddress = "l@a.ru" } }; XmlDocument customerXml = new XmlDocument(); XmlElement rootElem = customerXml.CreateElement("Customers"); customerXml.AppendChild(rootElem); foreach (Customer customer in customers) { XmlElement customerElem = customerXml.CreateElement("Customer"); XmlAttribute firstNameAttr = customerXml.CreateAttribute("FirstName"); firstNameAttr.Value = customer.FirstName; customerElem.Attributes.Append(firstNameAttr); XmlAttribute lastNameAttr = customerXml.CreateAttribute("LastName"); lastNameAttr.Value = customer.LastName; customerElem.Attributes.Append(lastNameAttr); XmlElement emailAddress = customerXml.CreateElement("EmailAddress"); emailAddress.InnerText = customer.EmailAddress; customerElem.AppendChild(emailAddress); rootElem.AppendChild(customerElem); }
string xPath = "/Customers/Customer[@FirstName="D"]"; XmlNode oneCustomer = customerXml.SelectSingleNode(xPath); if (oneCustomer != null) Console.WriteLine(oneCustomer.OuterXml); else Console.WriteLine("Not found"); } }</source>
XPath selecting: descendant::Customer[attribute::FirstName="D"]
<source lang="csharp">using System; using System.Collections.Generic; using System.IO; using System.Xml;
public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public string EmailAddress { get; set; } public override string ToString() { return string.Format("{0} {1}\nEmail: {2}",FirstName, LastName, EmailAddress); } } public class Tester { static void Main() { List<Customer> customers = new List<Customer>{ new Customer { FirstName = "A", LastName = "G", EmailAddress = "o@a.ru"}, new Customer { FirstName = "B", LastName = "C", EmailAddress = "k@a.ru" }, new Customer { FirstName = "D", LastName = "C", EmailAddress = "d@a.ru" }, new Customer { FirstName = "E", LastName = "G", EmailAddress = "j@a.ru" }, new Customer { FirstName = "L", LastName = "H", EmailAddress = "l@a.ru" } }; XmlDocument customerXml = new XmlDocument(); XmlElement rootElem = customerXml.CreateElement("Customers"); customerXml.AppendChild(rootElem); foreach (Customer customer in customers) { XmlElement customerElem = customerXml.CreateElement("Customer"); XmlAttribute firstNameAttr = customerXml.CreateAttribute("FirstName"); firstNameAttr.Value = customer.FirstName; customerElem.Attributes.Append(firstNameAttr); XmlAttribute lastNameAttr = customerXml.CreateAttribute("LastName"); lastNameAttr.Value = customer.LastName; customerElem.Attributes.Append(lastNameAttr); XmlElement emailAddress = customerXml.CreateElement("EmailAddress"); emailAddress.InnerText = customer.EmailAddress; customerElem.AppendChild(emailAddress); rootElem.AppendChild(customerElem); }
string xPath = "descendant::Customer[attribute::FirstName="D"]"; XmlElement oneCustomer = (XmlElement)customerXml.SelectSingleNode(xPath); if (oneCustomer != null) Console.WriteLine(oneCustomer.OuterXml); else Console.WriteLine("Not found");
} }</source>
XPath selecting: descendant::Customer[contains(EmailAddress, "a.com")]
<source lang="csharp">using System; using System.Collections.Generic; using System.IO; using System.Xml;
public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public string EmailAddress { get; set; } public override string ToString() { return string.Format("{0} {1}\nEmail: {2}",FirstName, LastName, EmailAddress); } } public class Tester { static void Main() { List<Customer> customers = new List<Customer>{ new Customer { FirstName = "A", LastName = "G", EmailAddress = "o@a.ru"}, new Customer { FirstName = "B", LastName = "C", EmailAddress = "k@a.ru" }, new Customer { FirstName = "D", LastName = "C", EmailAddress = "d@a.ru" }, new Customer { FirstName = "E", LastName = "G", EmailAddress = "j@a.ru" }, new Customer { FirstName = "L", LastName = "H", EmailAddress = "l@a.ru" } }; XmlDocument customerXml = new XmlDocument(); XmlElement rootElem = customerXml.CreateElement("Customers"); customerXml.AppendChild(rootElem); foreach (Customer customer in customers) { XmlElement customerElem = customerXml.CreateElement("Customer"); XmlAttribute firstNameAttr = customerXml.CreateAttribute("FirstName"); firstNameAttr.Value = customer.FirstName; customerElem.Attributes.Append(firstNameAttr); XmlAttribute lastNameAttr = customerXml.CreateAttribute("LastName"); lastNameAttr.Value = customer.LastName; customerElem.Attributes.Append(lastNameAttr); XmlElement emailAddress = customerXml.CreateElement("EmailAddress"); emailAddress.InnerText = customer.EmailAddress; customerElem.AppendChild(emailAddress); rootElem.AppendChild(customerElem); } string xPath = "descendant::Customer[contains(EmailAddress, "a.ru")]"; XmlNodeList customerList = customerXml.SelectNodes(xPath); Console.WriteLine("\nSelectNodes(\"{0}\")...", xPath); if (customerList != null) { foreach (XmlNode customer in customerList) Console.WriteLine(customer.OuterXml); } else Console.WriteLine("Not found");
} }</source>
XPath selecting: descendant::Customer[EmailAddress="k@a.com"]
<source lang="csharp">using System; using System.Collections.Generic; using System.IO; using System.Xml;
public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public string EmailAddress { get; set; } public override string ToString() { return string.Format("{0} {1}\nEmail: {2}",FirstName, LastName, EmailAddress); } } public class Tester { static void Main() { List<Customer> customers = new List<Customer>{ new Customer { FirstName = "A", LastName = "G", EmailAddress = "o@a.ru"}, new Customer { FirstName = "B", LastName = "C", EmailAddress = "k@a.ru" }, new Customer { FirstName = "D", LastName = "C", EmailAddress = "d@a.ru" }, new Customer { FirstName = "E", LastName = "G", EmailAddress = "j@a.ru" }, new Customer { FirstName = "L", LastName = "H", EmailAddress = "l@a.ru" } }; XmlDocument customerXml = new XmlDocument(); XmlElement rootElem = customerXml.CreateElement("Customers"); customerXml.AppendChild(rootElem); foreach (Customer customer in customers) { XmlElement customerElem = customerXml.CreateElement("Customer"); XmlAttribute firstNameAttr = customerXml.CreateAttribute("FirstName"); firstNameAttr.Value = customer.FirstName; customerElem.Attributes.Append(firstNameAttr); XmlAttribute lastNameAttr = customerXml.CreateAttribute("LastName"); lastNameAttr.Value = customer.LastName; customerElem.Attributes.Append(lastNameAttr); XmlElement emailAddress = customerXml.CreateElement("EmailAddress"); emailAddress.InnerText = customer.EmailAddress; customerElem.AppendChild(emailAddress); rootElem.AppendChild(customerElem); } string xPath = "descendant::Customer[EmailAddress="k@a.ru"]"; XmlElement oneCustomer = (XmlElement)customerXml.SelectSingleNode(xPath); Console.WriteLine("\nSelectSingleNode(\"{0}\")...", xPath); if (oneCustomer != null) Console.WriteLine(oneCustomer.OuterXml); else Console.WriteLine("Not found"); } }</source>
XPath selecting: descendant::Customer[@FirstName="D"]
<source lang="csharp">using System; using System.Collections.Generic; using System.IO; using System.Xml; public class Customer {
public string FirstName { get; set; } public string LastName { get; set; } public string EmailAddress { get; set; } public override string ToString() { return string.Format("{0} {1}\nEmail: {2}", FirstName, LastName, EmailAddress); }
} public class Tester {
static void Main() { List<Customer> customers = new List<Customer>{ new Customer { FirstName = "A", LastName = "G", EmailAddress = "o@a.ru"}, new Customer { FirstName = "B", LastName = "C", EmailAddress = "k@a.ru" }, new Customer { FirstName = "D", LastName = "C", EmailAddress = "d@a.ru" }, new Customer { FirstName = "E", LastName = "G", EmailAddress = "j@a.ru" }, new Customer { FirstName = "L", LastName = "H", EmailAddress = "l@a.ru" } }; XmlDocument customerXml = new XmlDocument(); XmlElement rootElem = customerXml.CreateElement("Customers"); customerXml.AppendChild(rootElem); foreach (Customer customer in customers) { XmlElement customerElem = customerXml.CreateElement("Customer"); XmlAttribute firstNameAttr = customerXml.CreateAttribute("FirstName"); firstNameAttr.Value = customer.FirstName; customerElem.Attributes.Append(firstNameAttr); XmlAttribute lastNameAttr = customerXml.CreateAttribute("LastName"); lastNameAttr.Value = customer.LastName; customerElem.Attributes.Append(lastNameAttr); XmlElement emailAddress = customerXml.CreateElement("EmailAddress"); emailAddress.InnerText = customer.EmailAddress; customerElem.AppendChild(emailAddress); rootElem.AppendChild(customerElem); }
string xPath = "descendant::Customer[@FirstName="D"]"; XmlNode oneCustomer = customerXml.SelectSingleNode(xPath); Console.WriteLine("\nSelectSingleNode(\"{0}\")...", xPath); if (oneCustomer != null) Console.WriteLine(oneCustomer.OuterXml); else Console.WriteLine("Not found"); }
}</source>
XPath selecting: descendant::Customer[starts-with(@LastName, "G") and contains(EmailAddress, "a.com")]
<source lang="csharp">using System; using System.Collections.Generic; using System.IO; using System.Xml; public class Customer {
public string FirstName { get; set; } public string LastName { get; set; } public string EmailAddress { get; set; } public override string ToString() { return string.Format("{0} {1}\nEmail: {2}", FirstName, LastName, EmailAddress); }
} public class Tester {
static void Main() { List<Customer> customers = new List<Customer>{ new Customer { FirstName = "A", LastName = "G", EmailAddress = "o@a.ru"}, new Customer { FirstName = "B", LastName = "C", EmailAddress = "k@a.ru" }, new Customer { FirstName = "D", LastName = "C", EmailAddress = "d@a.ru" }, new Customer { FirstName = "E", LastName = "G", EmailAddress = "j@a.ru" }, new Customer { FirstName = "L", LastName = "H", EmailAddress = "l@a.ru" } }; XmlDocument customerXml = new XmlDocument(); XmlElement rootElem = customerXml.CreateElement("Customers"); customerXml.AppendChild(rootElem); foreach (Customer customer in customers) { XmlElement customerElem = customerXml.CreateElement("Customer"); XmlAttribute firstNameAttr = customerXml.CreateAttribute("FirstName"); firstNameAttr.Value = customer.FirstName; customerElem.Attributes.Append(firstNameAttr); XmlAttribute lastNameAttr = customerXml.CreateAttribute("LastName"); lastNameAttr.Value = customer.LastName; customerElem.Attributes.Append(lastNameAttr); XmlElement emailAddress = customerXml.CreateElement("EmailAddress"); emailAddress.InnerText = customer.EmailAddress; customerElem.AppendChild(emailAddress); rootElem.AppendChild(customerElem); }
string xPath = "descendant::Customer[starts-with(@LastName, "G") and contains(EmailAddress, "a.ru")]"; XmlNodeList customerList = customerXml.SelectNodes(xPath); if (customerList != null) { foreach (XmlNode customer in customerList) Console.WriteLine(customer.OuterXml); } else Console.WriteLine("Not found"); }
}</source>
XPath selecting: descendant::EmailAddress[text()="k@a.com"]
<source lang="csharp">using System; using System.Collections.Generic; using System.IO; using System.Xml;
public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public string EmailAddress { get; set; } public override string ToString() { return string.Format("{0} {1}\nEmail: {2}",FirstName, LastName, EmailAddress); } } public class Tester { static void Main() { List<Customer> customers = new List<Customer>{ new Customer { FirstName = "A", LastName = "G", EmailAddress = "o@a.ru"}, new Customer { FirstName = "B", LastName = "C", EmailAddress = "k@a.ru" }, new Customer { FirstName = "D", LastName = "C", EmailAddress = "d@a.ru" }, new Customer { FirstName = "E", LastName = "G", EmailAddress = "j@a.ru" }, new Customer { FirstName = "L", LastName = "H", EmailAddress = "l@a.ru" } }; XmlDocument customerXml = new XmlDocument(); XmlElement rootElem = customerXml.CreateElement("Customers"); customerXml.AppendChild(rootElem); foreach (Customer customer in customers) { XmlElement customerElem = customerXml.CreateElement("Customer"); XmlAttribute firstNameAttr = customerXml.CreateAttribute("FirstName"); firstNameAttr.Value = customer.FirstName; customerElem.Attributes.Append(firstNameAttr); XmlAttribute lastNameAttr = customerXml.CreateAttribute("LastName"); lastNameAttr.Value = customer.LastName; customerElem.Attributes.Append(lastNameAttr); XmlElement emailAddress = customerXml.CreateElement("EmailAddress"); emailAddress.InnerText = customer.EmailAddress; customerElem.AppendChild(emailAddress); rootElem.AppendChild(customerElem); }
string xPath = "descendant::EmailAddress[text()="k@a.ru"]"; XmlNode oneEmail = customerXml.SelectSingleNode(xPath); if (oneEmail != null) Console.WriteLine(oneEmail.OuterXml); else Console.WriteLine("Not found");
} }</source>
XPath Select Nodes
<source lang="csharp">using System; using System.Xml; public class MainClass {
[STAThread] private static void Main() { XmlDocument doc = new XmlDocument(); doc.Load("Sample.xml"); XmlNodeList nodes = doc.SelectNodes("/Order/Items/Item/Name"); foreach (XmlNode node in nodes) { Console.WriteLine(node.InnerText); } }
}</source>
XPath XSLT transformation
<source lang="csharp">using System; using System.Xml; using System.Xml.Xsl; using System.Xml.XPath;
class MainClass { [STAThread] static void Main(string[] args) { XslTransform xslTransform = new XslTransform(); XPathDocument xpathDocument = new XPathDocument("../../sample.xml"); XmlTextWriter xmlTextWriter = new XmlTextWriter("../../sample.html", null); xslTransform.Load("../../sample.xslt"); xslTransform.Transform(xpathDocument, null, xmlTextWriter); } }</source>