XPath是XML的查询语言,其内容相当复杂。可以查阅www.w3.org/TR/xpath。
下面以一个实例简单了解一线XPath的查询方法:
public partial class Form1 : Form { private XmlDocument document; public Form1() { InitializeComponent(); document = new XmlDocument(); FileStream fs = new FileStream("xmlFileSelect.xml", FileMode.Open, FileAccess.Read); document.Load(fs); this.Update(document.DocumentElement.SelectNodes(".")); } private void Update(XmlNodeList nodes) { if (nodes == null || nodes.Count == 0) { textBox1.Text = "no result"; return; } string text = string.Empty; foreach(XmlNode node in nodes) { textBox1.Text= Format(node, text, ""); } } private string Format(XmlNode node, string text, string indent) { if (node is XmlText) { text += node.Value; return text; } if (string.IsNullOrEmpty(indent)) { indent = ""; } else { text += " " + indent; } if (node is XmlComment) { text += node.OuterXml; return text; } text += "<" + node.Name; if (node.Attributes.Count > 0) { AddAttribute(node, ref text); } if (node.HasChildNodes) { text += ">"; foreach (XmlNode child in node.ChildNodes) { Format(child, text, indent + " "); } if (node.ChildNodes.Count == 1 && (node.FirstChild is XmlText || node.FirstChild is XmlComment)) { text += " " + indent + "</" + node.Name + ">"; } } else { text += "/>"; } return text; } private void AddAttribute(XmlNode node, ref string text) { foreach (XmlAttribute attribute in node.Attributes) { text += " " + attribute.Name + "='" + attribute.Value + "'"; } } private void button1_Click(object sender, EventArgs e) { try { XmlNodeList nodes = document.DocumentElement.SelectNodes(textBox1.Text); Update(nodes); } catch (Exception error) { textBox1.Text = error.ToString(); } } }
主要实现根据输入内容检索xmlnode