您的位置:首页 > 编程语言

XPath系列(2)--XPath运算符&语法

2008-07-07 09:49 423 查看
运算符



运算符       描述

|     计算两个节点集    //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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息