xpath 语法

1、  xpath XML 标记语言的查询语言,是 XQUERY XSL 的基础,也是访问 XML-DOM 的有效方法, Xpath 提供了路径查询,简单运算,和过百中函数。以下为 www.w3school.com.cn XPATH 教程笔记。

 

源码 -XML

<? xml version = "1.0" encoding = "ISO-8859-1" ?>

<bookstore>

<book category = "COOKING" >

  <title lang = "en" > Everyday Italian </title>

  <author> Giada De Laurentiis </author>

  <year> 2005 </year>

  <price> 30.00 </price>

</book>

 

<book category = "CHILDREN" >

  <title lang = "eng" > Harry Potter </title>

  <author> J K. Rowling </author>

  <year> 2005 </year>

  <price> 29.99 </price>

</book>

 

<book category = "WEB" >

  <title lang = "en" > XQuery Kick Start </title>

  <author> James McGovern </author>

  <author> Per Bothner </author>

  <author> Kurt Cagle </author>

  <author> James Linn </author>

  <author> Vaidyanathan Nagarajan </author>

  <year> 2003 </year>

  <price> 49.99 </price>

</book>

 

<book category = "WEB" >

  <title lang = "en" > Learning XML </title>

  <author> Erik T. Ray </author>

  <year> 2003 </year>

  <price> 39.95 </price>

</book>

 

</bookstore>

 

 

 

 

2、  路径选择符

表达式

描述

nodename

选取此节点的所有子节点

/

从根节点选取

//

从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置

.

选取当前节点

..

选取当前节点的父节点

@

选取属性

[]

条件匹配符

例如:

A Bookstore / 时返回 <bookstore> 在内的所有节点,即上页 XML 中除了第一行的所有内容。

B //book 返回所有 <book>…</book> 节中的内容,不含含 <book> 标签。

<title lang = "en" > Everyday Italian </title>

<author> Giada De Laurentiis </author>

<year> 2005 </year>

<price> 30.00 </price>

<title lang = "eng" > Harry Potter </title>

<author> J K. Rowling </author>

<year> 2005 </year>

<price> 29.99 </price>

<title lang = "en" > XQuery Kick Start </title>

<author> James McGovern </author>

<author> Per Bothner </author>

<author> Kurt Cagle </author>

<author> James Linn </author>

<author> Vaidyanathan Nagarajan </author>

<year> 2003 </year>

<price> 49.99 </price>

<title lang = "en" > Learning XML </title>

<author> Erik T. Ray </author>

<year> 2003 </year>

<price> 39.95 </price>

C //title //author //year //price, 则返回相应节的内容,如: //title

Everyday ItalianHarry PotterXQuery Kick StartLearning XML

 

D //title[@lang] 选取具有 lang 属性的 title 元素, //title[@lang=”eng”] 选取 lang 属性为

eng title 元素。

 

Harry Potter

 

E //title/.. 等同 //book ; //title/. 等同 //title

F //. 选取当前匹配的任意节点,等同于 / + //book+//title+//author+//year+//price

   <bookstore>

    <book category = "COOKING" >

        <title lang = "en" > Everyday Italian </title>

        <author> Giada De Laurentiis </author>

        <year> 2005 </year>

        <price> 30.00 </price>

    </book>

    <book category = "CHILDREN" >

        <title lang = "eng" > Harry Potter </title>

        <author> J K. Rowling </author>

        <year> 2005 </year>

        <price> 29.99 </price>

    </book>

    <book category = "WEB" >

        <title lang = "en" > XQuery Kick Start </title>

        <author> James McGovern </author>

        <author> Per Bothner </author>

        <author> Kurt Cagle </author>

        <author> James Linn </author>

        <author> Vaidyanathan Nagarajan </author>

        <year> 2003 </year>

        <price> 49.99 </price>

    </book>

    <book category = "WEB" >

        <title lang = "en" > Learning XML </title>

        <author> Erik T. Ray </author>

        <year> 2003 </year>

        <price> 39.95 </price>

    </book>

</bookstore>

<book category = "COOKING" >

    <title lang = "en" > Everyday Italian </title>

    <author> Giada De Laurentiis </author>

    <year> 2005 </year>

    <price> 30.00 </price>

</book>

<book category = "CHILDREN" >

    <title lang = "eng" > Harry Potter </title>

    <author> J K. Rowling </author>

    <year> 2005 </year>

    <price> 29.99 </price>

</book>

<book category = "WEB" >

    <title lang = "en" > XQuery Kick Start </title>

    <author> James McGovern </author>

    <author> Per Bothner </author>

    <author> Kurt Cagle </author>

    <author> James Linn </author>

    <author> Vaidyanathan Nagarajan </author>

    <year> 2003 </year>

    <price> 49.99 </price>

</book>

<book category = "WEB" >

    <title lang = "en" > Learning XML </title>

    <author> Erik T. Ray </author>

    <year> 2003 </year>

    <price> 39.95 </price>

</book>

<title lang = "en" > Everyday Italian </title>

<author> Giada De Laurentiis </author>

<year> 2005 </year>

<price> 30.00 </price>

Everyday ItalianGiada De Laurentiis200530.00

<title lang = "eng" > Harry Potter </title>

<author> J K. Rowling </author>

<year> 2005 </year>

<price> 29.99 </price>

Harry PotterJ K. Rowling200529.99

<title lang = "en" > XQuery Kick Start </title>

<author> James McGovern </author>

<author> Per Bothner </author>

<author> Kurt Cagle </author>

<author> James Linn </author>

<author> Vaidyanathan Nagarajan </author>

<year> 2003 </year>

<price> 49.99 </price>

XQuery Kick StartJames McGovernPer BothnerKurt CagleJames LinnVaidyanathan Nagarajan200349.99

<title lang = "en" > Learning XML </title>

<author> Erik T. Ray </author>

<year> 2003 </year>

<price> 39.95 </price>

Learning XMLErik T. Ray200339.95

 

 

G 、其他

路径表达式

结果

/bookstore/book[1]

选取属于 bookstore 子元素的第一个 book 元素。

/bookstore/book[last()]

选取属于 bookstore 子元素的最后一个 book 元素。

/bookstore/book[last()-1]

选取属于 bookstore 子元素的倒数第二个 book 元素。

/bookstore/book[position()<3]

选取最前面的两个属于 bookstore 元素的子元素的 book 元素。

//title[@lang]

选取所有拥有名为 lang 的属性的 title 元素。

//title[@lang='eng']

选取所有 title 元素,且这些元素拥有值为 eng lang 属性。

/bookstore/book[price>35.00]

选取所有 bookstore 元素的 book 元素,且其中的 price 元素的值须大于 35.00

/bookstore/book[price>35.00]/title

选取所有 bookstore 元素中的 book 元素的 title 元素,且其中的 price 元素的值须大于 35.00

 

3、  xpath 通配符

通配符

描述

*

匹配任何元素节点

@*

匹配任何属性节点

node()

匹配任何类型的节点

         A * 等同与 bookstore //book/..

         B //@* 匹配所有的属性值

            COOKINGenCHILDRENengWEBenWEBen

         C //title[@*] 匹配所有的 title 元素

            Everyday ItalianHarry PotterXQuery Kick StartLearning XML

         D //* 匹配所有元素

<book category = "COOKING" >

    <title lang = "en" > Everyday Italian </title>

    <author> Giada De Laurentiis </author>

    <year> 2005 </year>

    <price> 30.00 </price>

</book>

<book category = "CHILDREN" >

    <title lang = "eng" > Harry Potter </title>

    <author> J K. Rowling </author>

    <year> 2005 </year>

    <price> 29.99 </price>

</book>

<book category = "WEB" >

    <title lang = "en" > XQuery Kick Start </title>

    <author> James McGovern </author>

    <author> Per Bothner </author>

    <author> Kurt Cagle </author>

    <author> James Linn </author>

    <author> Vaidyanathan Nagarajan </author>

    <year> 2003 </year>

    <price> 49.99 </price>

</book>

<book category = "WEB" >

    <title lang = "en" > Learning XML </title>

    <author> Erik T. Ray </author>

    <year> 2003 </year>

    <price> 39.95 </price>

</book>

<title lang = "en" > Everyday Italian </title>

<author> Giada De Laurentiis </author>

<year> 2005 </year>

<price> 30.00 </price>

Everyday ItalianGiada De Laurentiis200530.00

<title lang = "eng" > Harry Potter </title>

<author> J K. Rowling </author>

<year> 2005 </year>

<price> 29.99 </price>

Harry PotterJ K. Rowling200529.99

<title lang = "en" > XQuery Kick Start </title>

<author> James McGovern </author>

<author> Per Bothner </author>

<author> Kurt Cagle </author>

<author> James Linn </author>

<author> Vaidyanathan Nagarajan </author>

<year> 2003 </year>

<price> 49.99 </price>

XQuery Kick StartJames McGovernPer BothnerKurt CagleJames LinnVaidyanathan Nagarajan200349.99

<title lang = "en" > Learning XML </title>

<author> Erik T. Ray </author>

<year> 2003 </year>

<price> 39.95 </price>

Learning XMLErik T. Ray200339.95

 

4、  xpath

轴名称

结果

ancestor

选取当前节点的所有先辈(父、祖父等)

ancestor-or-self

选取当前节点的所有先辈(父、祖父等)以及当前节点本身

attribute

选取当前节点的所有属性

child

选取当前节点的所有子元素。

descendant

选取当前节点的所有后代元素(子、孙等)。

descendant-or-self

选取当前节点的所有后代元素(子、孙等)以及当前节点本身。

following

选取文档中当前节点的结束标签之后的所有节点。

namespace

选取当前节点的所有命名空间节点

parent

选取当前节点的父节点。

preceding

选取文档中当前节点的开始标签之前的所有节点。

preceding-sibling

选取当前节点之前的所有同级节点。

self

选取当前节点。

 

例子

结果

 

//child::book

选取所有属于当前节点的子元素的 book 节点

=//book

//attribute::lang

选取当前节点的 lang 属性

enengenen

//child::*

选取当前节点的所有子元素

=//*

//attribute::*

选取当前节点的所有属性

COOKINGenCHILDRENengWEBenWEBen

child::text()

选取当前节点的所有文本子节点

 

//child::node()

选取当前节点的所有子节点

=//*

//descendant::book

选取当前节点的所有 book 后代

=//book

//ancestor::title

选择当前节点的所有 title 先辈

Everyday ItalianHarry PotterXQuery Kick StartLearning XML

//ancestor-or-self::book

选取当前节点的所有book 先辈以及当前节点(假如此节点是book 节点的话)

=//book

//child::* /child::price

选取当前节点的所有 price 孙。

30.0029.9949.9939.95

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值