运算符
运算符 描述
| 计算两个节点集 //book | //cd 返回所有带有 book 和 ck 元素的节点集
下面的运算符功能和一般的编程语言相同
+ 加法
- 减法
* 乘法
div 除法
= 等于
!= 不等于
< 小于
<= 小于或等于
> 大于
>= 大于或等于
or 或
and 与
mod 计算除法的余数
语法
XML实例文档
我们将在下面的例子中使用这个XML文档。
<?xml version='1.0' encoding="gb2312"?>
<!-- This file represents a fragment of a book store inventory database -->
<bookstore>
<book genre="文学作品">
<title>钢铁怎样炼成的</title>
<author>
<first-name>尼古拉</first-name>
<last-name>奥斯特洛甫斯基</last-name>
</author>
<price type="RMB">8.99</price>
</book>
<book genre="小说">
<title>大骗子</title>
<author>
<first-name>希尔曼</first-name>
<last-name>梅尔维尔</last-name>
</author>
<price type="RMB">11.99</price>
</book>
<book genre="物理">
<title>相对论</title>
<author>
<name>爱因斯坦</name>
</author>
<price type="dollar">9.99</price>//类型是dollar
</book>
<book genre="生物">
<title>克隆人</title>
<author>
<name>xiage</name>
</author>
<price>9.99</price>//无属性
</book> </bookstore>
所有匹配的查询结果用XNode.Name + XNode.InnerText来表示
例如: 节点名称:bookstore + 文本:钢铁怎样炼成的 尼古拉 奥斯特洛甫斯基 8.99
1.选取节点
XPath使用路径表达式在XML文档中选取节点。节点是通过沿着某个路径或者step来选取的。
下面列出了最有用的路径表达式:
表达式 描述
nodename 选取此节点的所有子节点
/ 从根节点选取(绝对路径)
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性
示例
路径表达式 匹配结果
bookstore 选取bookstore元素的所有子节点
/bookstore 选取bookstore根元素,包含所有子元素 (
bookstore 钢铁怎样炼成的 尼古拉 奥斯特洛甫斯基 8.99
大骗子 希尔曼 梅尔维尔 11.99
相对论 爱因斯坦 9.99
)
//bookstore/book选取所有属于bookstore的子元素的book元素 (
book 钢铁怎样炼成的 尼古拉 奥斯特洛甫斯基 8.99
book 大骗子 希尔曼 梅尔维尔 11.99
book 相对论 爱因斯坦 9.99
)
//book 选取所有book子元素,而不管它们在文档中的位置(
book 钢铁怎样炼成的 尼古拉 奥斯特洛甫斯基 8.99
book 大骗子 希尔曼 梅尔维尔 11.99
book 相对论 爱因斯坦 9.99
)
/bookstore//book (1)
//bookstore//book(2) (1)&(2)选择所有属于bookstore元素的后代的book元素,而不管它们位于bookstore之下的什么位置。
//@genre 选取所有名为genre的属性。(book[@genre])(
book 钢铁怎样炼成的 尼古拉 奥斯特洛甫斯基 8.99
book 大骗子 希尔曼 梅尔维尔 11.99
book 相对论 爱因斯坦 9.99
)
________________________________________
2.查询语句--谓语(Predicates[ 'predikits ])
谓语用来查找某个特定的节点或者包含某个指定的值的节点。谓语被嵌在方括号中。
示例
路径表达式 结果
/bookstore/book[1] 选取属于bookstore子元素的第一个book元素。
查询结果 book 钢铁怎样炼成的 尼古拉 奥斯特洛甫斯基 8.99
/bookstore/book[last()] 选取属于bookstore子元素的最后一个book元素。
查询结果 book 相对论 爱因斯坦 9.99
/bookstore/book[last()-1] 选取属于bookstore子元素的倒数第二个book元素。
查询结果 book 大骗子 希尔曼 梅尔维尔 11.99
/bookstore/book[position()<3] 选取最前面的两个属于bookstore元素的子元素的book元素。
查询结果 book 钢铁怎样炼成的 尼古拉 奥斯特洛甫斯基 8.99
book 大骗子 希尔曼 梅尔维尔 11.99
//price[@type] 选取所有拥有名为type的属性的price元素。
查询结果
price 8.99
price 11.99
price 9.99
// price [@type ='dollar'] 选取所有price元素,且这些元素拥有值为dollar的type属性。
查询结果 price 9.99
/bookstore/book[price>10 ] 选取所有bookstore元素的book元素,且其中的price元素的值须大于10。
查询结果 book 大骗子 希尔曼 梅尔维尔 11.99
/bookstore/book[price>10]/title 选取所有bookstore元素中price元素的值大于10的book元素。
查询结果 title 大骗子
/bookstore/book[price<10 and price >9]/title 选取所有bookstore元素中price元素的值小于10或大于9的book元素。
查询结果 title 相对论
/bookstore/book[price>10 or price <9]/title 选取所有bookstore元素中price元素的值小于9或大于10的book元素。
查询结果
title 大骗子
title 相对论
________________________________________
3.选取未知节点
XPath通配符可用来选取未知的XML元素。
通配符 描述
* 匹配任何元素节点
@* 匹配任何属性节点
node() 匹配任何类型的节点
示例
路径表达式 结果
//book/* 选取所有book的子节点,不管他们的位置如何。
查询结果
title 钢铁怎样炼成的
author 尼古拉奥斯特洛甫斯基
price 8.99
title 大骗子
author 希尔曼梅尔维尔
price 11.99
title 相对论
author 爱因斯坦
price 9.99
/bookstore/* 选取bookstore元素的所有子节点
查询结果
book 钢铁怎样炼成的尼古拉奥斯特洛甫斯基8.99
book 大骗子希尔曼梅尔维尔11.99
book 相对论爱因斯坦9.99
//* 选取文档中的所有元素
//price[@*] 选取所有带有属性的price元素。
查询结果
price 8.99
price 11.99
price 9.99
4.选取若干路径
通过在路径表达式中使用“|”运算符,您可以使用选取若干个路径。
实例
在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:
路径表达式 结果
//book/title | //book/price 选取所有book元素的tilte和price元素。
查询结果
title 钢铁怎样炼成的
price 8.99
title 大骗子
price 11.99
title 相对论
price 9.99
title 克隆人
price 9.99
//title | //price 选取所有文档中的title和price元素。
查询结果
title 钢铁怎样炼成的
price 8.99
title 大骗子
price 11.99
title 相对论
price 9.99
title 克隆人
price 9.99
/bookstore/book/title | //price 选取所有属于bookstore元素的book元素的title元素,以及文档中所有的price元素。
查询结果
title 钢铁怎样炼成的
price 8.99
title 大骗子
price 11.99
title 相对论
price 9.99
title 克隆人
price 9.99