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