01.最常见的XML数据类型有:Element, Attribute,Comment, Text. 02. 03. Element, 指形如<Name>Tom<Name>的节点。它可以包括:Element, Text, Comment, ProcessingInstruction, CDATA, and EntityReference. 04. 05. Attribute, 指在<Employee >中的粗体部分。 06. 07. Comment,指形如:<!-- my comment --> 的节点。 08. 09. 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>
本文来自博客,转载请标明出处:http://blog.csdn.net/wf520pb/archive/2008/07/12/2644549.aspx