XML查询

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

原文地址:https://www.cnblogs.com/simen-tan/p/5410865.html