关闭

xPath语法

794人阅读 评论(0) 收藏 举报

下面是一个XML例子,我们将用它来说明XPath语法:

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>
<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>
</bookstore>

一、选择结点

表达式                      说明

结点名                     选择当前结点的所有子结点

                               从根结点开始

//                               从当前结点开始选择符合条件的结点

.                               选择当前的结点

..                              选择当前结点的双亲

@                            选择属性

举例说明如下:

表达式                        说明

bookstore                    选择bookstore元素的所有子结点

/bookstore                   选择根元素bookstore

bookstore/book           选择bookstore下的所有book子元素

//book                         选择文档中的所有book元素

bookstore//book          选择bookstore下的所有book子孙元素

//@lang                        选择所有名为lang的属性

二、谓词

谓词用于寻找特定的结点或一个包含特定值的结点。谓词包括在方括号中。


举例说明如下:

表达式    说明

/bookstore/book[1]   选择bookstore元素下的第一个book子元素

/bookstore/book[last()]  选择bookstore元素下的最后一个book子元素

/bookstore/book[last()-1] 选择bookstore元素下的最后一个book子元素,book子元素应是   bookstore下唯一的一个

/bookstore/book[position()<3] 选择bookstore元素下开始的两个book子元素

//title[@lang]   选择所有的包含属性名为langtitle元素

//title[@lang='eng']  选择所有的包含属性名为lang且属性值为engtitle元素

/bookstore/book[price>35.00] 选择bookstore元素下的所有包含值大于35.00price元素的book  元素

/bookstore/book[price>35.00]/title 选择bookstore元素下的所有包含值大于35.00price元素 book子元素下的title子元素

三、选择未知的结点

表达式           说明

*                     匹配任何的元素结点

@*                 匹配任何的属性结点

node()             匹配任何类型的结点

举例说明如下:

表达式              说明

/bookstore/*      选择bookstore元素下的所有子结点

//*                     选择文档中的所有元素

//title[@*]          选择所有的title元素不管其属性如何

四、多路径选择

通过有表达式中使用|操作符,你可以进行多路径选择。

示例如下:

表达式                           说明

//book/title | //book/price 选择所有book元素下的titleprice子元素

//title | //price                   选择文档中的所有的titleprice元素

/bookstore/book/title | //price 选择/bookstore/book/下的title子元素和文档中的所有price元素

五、XPath轴心

一个轴心定义了相对于当前结点的结点集,例表如下:

轴心名                  说明

ancestor                 选择当前结点的所有祖先

ancestor-or-self     选择当前结点及其所有祖先

attribute                 选择当前结点的所有属性

child                      选择当前结点的所有子女

descendant            选择当前结点的所有子孙

示例说明:

表达式   说明

child::book  选择当前结点的所有book子结点

attribute::lang  选择当前结点的lang属性

child::*  选择当前结点的所有子女

attribute::*  选择当前结点的所有属性

child::text()  选择当前结点的所有文本子结点

child::node()  选择当前结点的所有子结点

descendant::book 选择当前结点的所有子孙book

ancestor::book  选择当前结点的所有祖先book

ancestor-or-self::book 选择当前结点的所有祖先book,如果当前结点也是book,那么包含当前结点

child::*/child::price 选择当前结点的所有孙子结点price

descendant-or-self 选择当前结点及其所有子孙

following  选择当前结点结束标记后的东西

following-sibling 选择当前结点后的所有同科

namespace  选择当前结点的所有名字空间结点

parent   选择当前结点的双亲
 
preceding  
选择当前结点开始标记前的东西

preceding-sibling 选择当前结点前的所有同科

self   选择当前结点

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:75117次
    • 积分:809
    • 等级:
    • 排名:千里之外
    • 原创:16篇
    • 转载:16篇
    • 译文:0篇
    • 评论:3条
    最新评论