博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Xml中SelectSingleNode方法中的xpath用法
阅读量:5266 次
发布时间:2019-06-14

本文共 3996 字,大约阅读时间需要 13 分钟。

最常见的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 参考数据

Cai WuBu
Zhang Bin
12345
Zhang Bin
male
10101
Zhang QI
female
10102
Zhang Xia
male
10201
ZhangChuang
male
10202
Zhang Jun
male
KaiFa Bu
Wang Bin
22345
Wang Bin
male
20101
Wang QI
female
20102
Wang Xia
male
20201
Wang Chuang
male
20201
Wang Jun
male

 

转载于:https://www.cnblogs.com/tytr/p/8482685.html

你可能感兴趣的文章
Linux查找命令对比(find、locate、whereis、which、type、grep)
查看>>
路由器外接硬盘做nas可行吗?
查看>>
python:从迭代器,到生成器,再到协程的示例代码
查看>>
Java多线程系列——原子类的实现(CAS算法)
查看>>
在Ubuntu下配置Apache多域名服务器
查看>>
多线程《三》进程与线程的区别
查看>>
linux sed命令
查看>>
html标签的嵌套规则
查看>>
[Source] Machine Learning Gathering/Surveys
查看>>
HTML <select> 标签
查看>>
类加载机制
查看>>
tju 1782. The jackpot
查看>>
湖南多校对抗赛(2015.03.28) H SG Value
查看>>
hdu1255扫描线计算覆盖两次面积
查看>>
hdu1565 用搜索代替枚举找可能状态或者轮廓线解(较优),参考poj2411
查看>>
bzoj3224 splay板子
查看>>
程序存储问题
查看>>
Mac版OBS设置详解
查看>>
优雅地书写回调——Promise
查看>>
android主流开源库
查看>>