首页 > 代码库 > XML查询

XML查询

XPath是XML的查询语言,其内容相当复杂。可以查阅www.w3.org/TR/xpath。

下面以一个实例简单了解一线XPath的查询方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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 += "\r\n" + 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 += "\r\n" + 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

XML查询