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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值