Xml中SelectSingleNode步骤中的xpath用法

Xml中SelectSingleNode方法中的xpath用法
view plaincopy to clipboardprint?

   1. 最常见的XML数据类型有:Element, Attribute,Comment, Text. 
   2.  
   3.    Element, 指形如<Name>Tom<Name>的节点。它可以包括:Element, Text, Comment, ProcessingInstruction, CDATA, and EntityReference. 
   4.  
   5.    Attribute, 指在<Employee >中的粗体部分。 
   6.  
   7.    Comment,指形如:<!-- my comment --> 的节点。 
   8.  
   9.    Text,指在<Name>Tom<Name>的粗体部分。 
  10.  
  11.   在XML中,可以用XmlNode对象来参照各种XML数据类型。 
  12.  
  13.    2.1 查询已知绝对路径的节点(集) 
  14.  
  15.    objNodeList = objDoc.SelectNodes(“Company/Department/Employees/Employee”) 
  16.  
  17.   或者 
  18.  
  19.    objNodeobjNodeList = objNode.SelectNodes(“/Company/Department/Employees/Employee”) 
  20.  
  21.   以上两种方法可返回一个NodeList对象,如果要返回单个节点可使用SelectSingleNode方法,该方法如果查询到一个或多个节点,返回第一个节点;如果没有查询的任何节点返回 Nothing。例如: 
  22.  
  23.    objNodeobjNode = objNode.SelectSingleNode(“/Company/Department/Employees/Employee”) 
  24.  
  25.    If Not (objNode is Nothing) then 
  26.  
  27.    ‘- Do process 
  28.  
  29.    End If 
  30.  
  31.    2.2 查询已知相对路径的节点(集) 
  32.  
  33.   可使用类似于文件路径的相对路径的方式来查询XML的数据 
  34.  
  35.    objNode = objDoc.SelectSingleNode(“Company/Department”) 
  36.  
  37.    objNodeobjNodeList = objNode.SelectNodes(“../Department) 
  38.  
  39.    objNodeobjNode = objNode.SelectNode(“Employees/Employee”) 
  40.  
  41.    2.3 查询已知元素名的节点(集) 
  42.  
  43.   在使用不规则的层次文档时,由于不知道中间层次的元素名,可使用//符号来越过中间的节点,查询其子,孙或多层次下的其他所有元素。例如: 
  44.  
  45.    objNodeList = objDoc.SelectNodes(“Company//Employee”) 
  46.  
  47.    2.4 查询属性(attribute)节点 
  48.  
  49.   以上的各种方法都返回元素(element)节点(集),返回属性(attribute),只需要采用相应的方法,在属性名前加一个@符号即可,例如: 
  50.  
  51.    objNodeList = objDoc.SelectNodes(“Company/Department/Employees/Employee/@id”) 
  52.  
  53.    objNodeList = objDoc.SelectNodes(“Company//@id”) 
  54.  
  55.    2.5 查询Text节点 
  56.  
  57.   使用text()来获取Text节点。 
  58.  
  59.    objNode = objDoc.SelectSingleNode(“Company/Department/Deparmt_Name/text()”) 
  60.  
  61.    2.6 查询特定条件的节点 
  62.  
  63.   使用[]符号来查询特定条件的节点。例如: 
  64.  
  65.    a. 返回id号为 10102的Employee节点 
  66.  
  67.    objNode = objDoc.SelectSingleNode(“Company/Department/Employees/Employee[@id=’10102’]”) 
  68.  
  69.    b. 返回Name为Zhang Qi的Name 节点 
  70.  
  71.    objNode = objDoc.SelectSingleNode(“Company/Department/Employees/Employee/Name[text()=’Zhang Qi’]”) 
  72.  
  73.    c. 返回部门含有职员22345的部门名称节点 
  74.  
  75.    objNode = objDoc.SelectSingleNode("Company/Department[Employees/Employee/@id='22345']/Department_Name") 
  76.  
  77.    2.7 查询多重模式的节点 
  78.  
  79.   使用 | 符号可以获得多重模式的节点。例如: 
  80.  
  81.    objNodeList = objDoc.SelectNodes(“Company/Department/Department_Name | Company/Department/Manager”) 
  82.  
  83.    2.8 查询任意子节点 
  84.  
  85.   使用*符号可以返回当前节点的所有子节点。 
  86.  
  87.    objNodeList = objDoc.SelectNodes(“Company/*/Manager) 
  88.  
  89.   或者 
  90.  
  91.    objNodeobjNodeList = objNode.ChildNodes 
  92.  
  93.    
  94.  
  95.    3 XML数据的编辑 
  96.  
  97.    3.1 增加一个元素的属性(attribute)节点 
  98.  
  99.    Dim objNodeAttr As XmlNode 
100.  
101.    objNodeAttr = objDoc.CreateAttribute("id", Nothing) 
102.  
103.    objNodeAttr.InnerXml = "101" 
104.  
105.    objNode.Attributes.Append(objNodeAttr) 
106.  
107.    3.2 删除一个元素的属性 
108.  
109.    objNode.Attributes.Remove(objNodeAttr) 
110.  
111.    3.3 增加一个子元素(Element) 
112.  
113.    Dim objNodeChild As XmlNode 
114.  
115.    objNodeChild = objDoc.CreateElement(Nothing, "ID", Nothing) 
116.  
117.    objNodeChild.InnerXml = "101" 
118.  
119.    objNode.AppendChild(objNodeChild) 
120.  
121.    3.4 删除一个子元素 
122.  
123.    objNode.RemoveChild(objNodeChild) 
124.  
125.    3.5 替换一个子元素 
126.  
127.    objNOde.ReplaceChild(newChild,oldChild) 
128.  
129.    
130.  
131.    4 参考数据 
132.  
133.    <?xml version="1.0" encoding="UTF-8"?> 
134.  
135.    <Company> 
136.  
137.    <Department > 
138.  
139.    <Department_Name>Cai WuBu</Department_Name> 
140.  
141.    <Manager>Zhang Bin</Manager> 
142.  
143.    <Employees> 
144.  
145.    <Employee > 
146.  
147.    <Employee_ID>12345</Employee_ID> 
148.  
149.    <Name>Zhang Bin</Name> 
150.  
151.    <Gender>male</Gender> 
152.  
153.    </Employee> 
154.  
155.    <Employee > 
156.  
157.    <Employee_ID>10101</Employee_ID> 
158.  
159.    <Name>Zhang QI</Name> 
160.  
161.    <Gender>female</Gender> 
162.  
163.    </Employee> 
164.  
165.    <Employee > 
166.  
167.    <Employee_ID>10102</Employee_ID> 
168.  
169.    <Name>Zhang Xia</Name> 
170.  
171.    <Gender>male</Gender> 
172.  
173.    </Employee> 
174.  
175.    <Employee > 
176.  
177.    <Employee_ID>10201</Employee_ID> 
178.  
179.    <Name>ZhangChuang</Name> 
180.  
181.    <Gender>male</Gender> 
182.  
183.    </Employee> 
184.  
185.    <Employee > 
186.  
187.    <Employee_ID>10202</Employee_ID> 
188.  
189.    <Name>Zhang Jun</Name> 
190.  
191.    <Gender>male</Gender> 
192.  
193.    </Employee> 
194.  
195.    </Employees> 
196.  
197.    </Department> 
198.  
199.    <Department > 
200.  
201.    <Department_Name>KaiFa Bu</Department_Name> 
202.  
203.    <Manager>Wang Bin</Manager> 
204.  
205.    <Employees> 
206.  
207.    <Employee > 
208.  
209.    <Employee_ID>22345</Employee_ID> 
210.  
211.    <Name>Wang Bin</Name> 
212.  
213.    <Gender>male</Gender> 
214.  
215.    </Employee> 
216.  
217.    <Employee > 
218.  
219.    <Employee_ID>20101</Employee_ID> 
220.  
221.    <Name>Wang QI</Name> 
222.  
223.    <Gender>female</Gender> 
224.  
225.    </Employee> 
226.  
227.    <Employee > 
228.  
229.    <Employee_ID>20102</Employee_ID> 
230.  
231.    <Name>Wang Xia</Name> 
232.  
233.    <Gender>male</Gender> 
234.  
235.    </Employee> 
236.  
237.    <Employee > 
238.  
239.    <Employee_ID>20201</Employee_ID> 
240.  
241.    <Name>Wang Chuang</Name> 
242.  
243.    <Gender>male</Gender> 
244.  
245.    </Employee> 
246.  
247.    <Employee > 
248.  
249.    <Employee_ID>20201</Employee_ID> 
250.  
251.    <Name>Wang Jun</Name> 
252.  
253.    <Gender>male</Gender> 
254.  
255.    </Employee> 
256.  
257.    </Employees> 
258.  
259.    </Department> 
260.  
261.    </Company>