惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
量子位
大猫的无限游戏
大猫的无限游戏
Hugging Face - Blog
Hugging Face - Blog
S
SegmentFault 最新的问题
Blog — PlanetScale
Blog — PlanetScale
月光博客
月光博客
Google DeepMind News
Google DeepMind News
小众软件
小众软件
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
MongoDB | Blog
MongoDB | Blog
B
Blog RSS Feed
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog
博客园 - 聂微东
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
Y
Y Combinator Blog
Microsoft Security Blog
Microsoft Security Blog
雷峰网
雷峰网
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell

博客园 - Gavin Liu

sp_MSforeachtable 与 sp_MSforeachdb Microsoft SQL Server 数据库服务器管理维护角色 HttpHander与httpModel配置与应用 镜像数据库日志截断方法 SQL Server 2008连接字符串写法大全 .NET分布式事务处理 .net 事务处理的三种方法 SQLServer游标(Cursor) (B) SQLServer 游标 (A) 无光驱在32位windows系统下安装64位windows系统 Create a SQL Server Database on a network shared drive Sql server 2008镜像配置步骤 android adb shell dumpsys 如何获取SQLite最新版本及SQLite数据库中的SQL语句解说 sqlite错误 The database disk image is malformed database disk image is malformed 可解决 利用ASP在线压缩access数据库 英文 视频 老友记 第一季 第二季 第三季 第四季 第五季 第六季 第七季 第八季 第九季 第十季 几个好用的webservice SQL Server 2008 中文版安装下载地址
Xml中SelectSingleNode方法中的xpath用法[转]
Gavin Liu · 2012-05-29 · via 博客园 - Gavin Liu

 

最常见的XML数据类型有:Element, Attribute,Comment, Text.

   Element, 指形如<Name>Tom<Name>的节点。它可以包括:Element, Text, Comment, ProcessingInstruction, CDATA, and EntityReference.

   Attribute, 指在<Employee >中的粗体部分。

   Comment,指形如:<!-- my comment --> 的节点。

   Text,指在<Name>Tom<Name>的粗体部分。

  在XML中,可以用XmlNode对象来参照各种XML数据类型。

   2.1 查询已知绝对路径的节点(集)

   objNodeList = objDoc.SelectNodes(“Company/Department/Employees/Employee”)

  或者

   objNodeList = objNode.SelectNodes(“/Company/Department/Employees/Employee”)

  以上两种方法可返回一个NodeList对象,如果要返回单个节点可使用SelectSingleNode方法,该方法如果查询到一个或多个节点,返回第一个节点;如果没有查询的任何节点返回 Nothing。例如:

   objNode = objNode.SelectSingleNode(“/Company/Department/Employees/Employee”)

   If Not (objNode is Nothing) then

   ‘- Do process

   End If

   2.2 查询已知相对路径的节点(集)

  可使用类似于文件路径的相对路径的方式来查询XML的数据

   objNode = objDoc.SelectSingleNode(“Company/Department”)

   objNodeList = objNode.SelectNodes(“../Department)

   objNode = objNode.SelectNode(“Employees/Employee”)

   2.3 查询已知元素名的节点(集)

  在使用不规则的层次文档时,由于不知道中间层次的元素名,可使用//符号来越过中间的节点,查询其子,孙或多层次下的其他所有元素。例如:

   objNodeList = objDoc.SelectNodes(“Company//Employee”)

   2.4 查询属性(attribute)节点

  以上的各种方法都返回元素(element)节点(集),返回属性(attribute),只需要采用相应的方法,在属性名前加一个@符号即可,例如:

   objNodeList = objDoc.SelectNodes(“Company/Department/Employees/Employee/@id”)

   objNodeList = objDoc.SelectNodes(“Company//@id”)

   2.5 查询Text节点

  使用text()来获取Text节点。

   objNode = objDoc.SelectSingleNode(“Company/Department/Deparmt_Name/text()”)

   2.6 查询特定条件的节点

  使用[]符号来查询特定条件的节点。例如:

   a. 返回id号为 10102的Employee节点

   objNode = objDoc.SelectSingleNode(“Company/Department/Employees/Employee[@id=’10102’]”)

   b. 返回Name为Zhang Qi的Name 节点

   objNode = objDoc.SelectSingleNode(“Company/Department/Employees/Employee/Name[text()=’Zhang Qi’]”)

   c. 返回部门含有职员22345的部门名称节点

   objNode = objDoc.SelectSingleNode("Company/Department[Employees/Employee/@id='22345']/Department_Name")

   2.7 查询多重模式的节点

  使用 | 符号可以获得多重模式的节点。例如:

   objNodeList = objDoc.SelectNodes(“Company/Department/Department_Name | Company/Department/Manager”)

   2.8 查询任意子节点

  使用*符号可以返回当前节点的所有子节点。

   objNodeList = objDoc.SelectNodes(“Company/*/Manager)

  或者

   objNodeList = objNode.ChildNodes  

   3 XML数据的编辑

   3.1 增加一个元素的属性(attribute)节点

   Dim objNodeAttr As XmlNode

   objNodeAttr = objDoc.CreateAttribute("id", Nothing)

   objNodeAttr.InnerXml = "101"

   objNode.Attributes.Append(objNodeAttr)

   3.2 删除一个元素的属性

   objNode.Attributes.Remove(objNodeAttr)

   3.3 增加一个子元素(Element)

   Dim objNodeChild As XmlNode

   objNodeChild = objDoc.CreateElement(Nothing, "ID", Nothing)

   objNodeChild.InnerXml = "101"

   objNode.AppendChild(objNodeChild)

   3.4 删除一个子元素

   objNode.RemoveChild(objNodeChild)

   3.5 替换一个子元素

   objNOde.ReplaceChild(newChild,oldChild)  

   4 参考数据

复制代码


<?xml version="1.0" encoding="UTF-8"?>
<Company>
<Department >
<Department_Name>Cai WuBu</Department_Name>
<Manager>Zhang Bin</Manager>
<Employees>
<Employee >
<Employee_ID>12345</Employee_ID>
<Name>Zhang Bin</Name>
<Gender>male</Gender>
</Employee>
<Employee >
<Employee_ID>10101</Employee_ID>
<Name>Zhang QI</Name>
<Gender>female</Gender>
</Employee>
<Employee >
<Employee_ID>10102</Employee_ID>
<Name>Zhang Xia</Name>
<Gender>male</Gender>
</Employee>
<Employee >
<Employee_ID>10201</Employee_ID>
<Name>ZhangChuang</Name>
<Gender>male</Gender>
</Employee>
<Employee >
<Employee_ID>10202</Employee_ID>
<Name>Zhang Jun</Name>
<Gender>male</Gender>
</Employee>
</Employees>
</Department>
<Department >
<Department_Name>KaiFa Bu</Department_Name>
<Manager>Wang Bin</Manager>
<Employees>
<Employee >
<Employee_ID>22345</Employee_ID>
<Name>Wang Bin</Name>
<Gender>male</Gender>
</Employee>
<Employee >
<Employee_ID>20101</Employee_ID>
<Name>Wang QI</Name>
<Gender>female</Gender>
</Employee>
<Employee >
<Employee_ID>20102</Employee_ID>
<Name>Wang Xia</Name>
<Gender>male</Gender>
</Employee>
<Employee >
<Employee_ID>20201</Employee_ID>
<Name>Wang Chuang</Name>
<Gender>male</Gender>
</Employee>
<Employee >
<Employee_ID>20201</Employee_ID>
<Name>Wang Jun</Name>
<Gender>male</Gender>
</Employee>
</Employees>
</Department>
</Company>

复制代码