xpath常用语法

XPath 示例


本主题回顾整个 XPath 参考中出现的语法示例。所有示例均基于本节后所附 《XPath 语法的示例 XML 文件》。


表达式 引用
./author
当前上下文中的所有 <author> 元素。注意,此表达式等效于下一行中的表达式。
author
当前上下文中的所有 <author> 元素。
first.name
当前上下文中的所有 <first.name> 元素。
/bookstore
本文档的文档元素 (<bookstore> )。
//author
文档中的所有 <author> 元素。
book[/bookstore/@specialty = @style]
style 属性值等于文档根目录的 <bookstore> 元素的 specialty 属性值的所有 <book> 元素。
author/first-name
属于 <author> 元素的子级的所有 <first-name> 元素。
bookstore//title
<bookstore> 元素中更深的一级或多级(任意子代)的所有 <title> 元素。注意,此表达式不同于下一行中的表达式。
bookstore/*/title
属于 <bookstore> 元素的孙级的所有 <title> 元素。
bookstore//book/excerpt//emph
<book> 元素的 <excerpt> 子级中的任意位置和 <bookstore> 元素中的任意位置的所有 <emph> 元素。
.//title
当前上下文中更深的一级或多级的所有 <title> 元素。注意,本质上只有这种情况需要句点表示法。
author/*
属于 <author> 元素的子级的所有元素。
book/*/last-name
属于 <book> 元素的孙级的所有 <last-name> 元素。
*/*
当前上下文的所有孙级元素。
*[@specialty]
具有 specialty 属性的所有元素。
@style
当前上下文的 style 属性。
price/@exchange
当前上下文中 <price> 元素的 exchange 属性。
price/@exchange/total
返回空节点集,因为属性不包含元素子级。XML 路径语言 (XPath) 语法允许使用此表达式,但是严格意义上讲无效。
book[@style]
当前上下文的具有 style 属性的所有 <book> 元素。
book/@style
当前上下文的所有 <book> 元素的 style 属性。
@*
当前元素上下文的所有属性。
./first-name
当前上下文节点中的所有 <first-name> 元素。注意,此表达式等效于下一行中的表达式。
first-name
当前上下文节点中的所有 <first-name> 元素。
author[1]
当前上下文节点中的第一个 <author> 元素。
author[first-name][3]
具有 <first-name> 子级的第三个 <author> 元素。
my:book
my 命名空间中的 <book> 元素。
my:*
my 命名空间中的所有元素。
@my:*
my 命名空间中的所有属性(不包括 my 命名空间中的元素的未限定属性)。
 
注意,索引相对于父级。考虑以下数据:
Xml代码  
<x>  
    <y />  
    <y />  
</x>  
<x>  
    <y />  
    <y />  
</x>  
 
表达式 引用
x/y[1]
每个 <x> 的第一个 <y> 子级。此表达式等效于下一行中的表达式。
x/y[position() = 1]
每个 <x> 的第一个 <y> 子级。
(x/y)[1]
<x> 元素的整个 <y> 子级元素集中的第一个 <y> 。
x[1]/y[2]
第一个 <x> 的第二个 <y> 子级。
 
其他示例引用 《XPath 语法的示例 XML 文件》。
表达式 引用
book[last()]
当前上下文节点的最后一个 <book> 元素。
book/author[last()]
当前上下文节点的每个 <book> 元素的最后一个 <author>子级。
(book/author)[last()]
当前上下文节点的 <book> 元素的整个 <author> 子级元素集中的最后一个 <author> 元素。
book[excerpt]
至少包含一个 <excerpt> 元素子级的所有 <book> 元素。
book[excerpt]/title
属于 <book> 元素(也至少包含一个 <excerpt> 元素子级)的子级的所有 <title> 元素。
book[excerpt]/author[degree]
至少包含一个 <degree> 元素子级并且属于 <book> 元素(也至少包含一个 <excerpt> 元素)子级的所有<author> 元素。
book[author/degree]
所有包含 <author> 子级的 <book> 元素,该子级至少包含一个 <degree> 子级。
author[degree][award]
至少包含一个 <degree> 元素子级以及至少包含一个<award> 元素子级的所有 <author> 元素。
author[degree and award]
至少包含一个 <degree> 元素子级以及至少包含一个<award> 元素子级的所有 <author> 元素。
author[(degree or award) and publication]
至少包含一个 <degree> 或 <award> 以及至少包含一个<publication> 子级的所有 <author> 元素。
author[degree and not(publication)]
至少包含一个 <degree> 元素子级并且不包含<publication> 元素子级的所有 <author> 元素。
author[not(degree or award) and publication]
至少包含一个 <publication> 元素子级并且不包含<degree> 和 <award> 元素子级的所有 <author> 元素。
author[last-name = "Bob"]
至少包含一个值为 Bob 的 <last-name> 元素子级的所有<author> 元素。
author[last-name[1] = "Bob"]
第一个 <last-name> 子元素的值为 Bob 的所有 <author>元素。注意,此表达式等效于下一行中的表达式。
author[last-name [position()=1]= "Bob"]
第一个 <last-name> 子元素的值为 Bob 的所有 <author>元素。
degree[@from != "Harvard"]
from 属性不等于 "Harvard" 的所有 <degree> 元素。
author[. = "Matthew Bob"]
所有值为 Matthew Bob 的 <author> 元素。
author[last-name = "Bob" and ../price &gt; 50]
包含值为 Bob 的 <last-name> 子元素以及值大于 50 的<price> 同辈元素的所有 <author> 元素。
book[position() &lt;= 3]
前三本书(1、2、3)。
author[not(last-name = "Bob")]
不包含值为 Bob 的 <last-name> 子元素的所有 <author>元素。
author[first-name = "Bob"]
至少包含一个值为 Bob 的 <first-name> 元素的所有<author> 元素。
author[* = "Bob"]
所有包含任何值为 Bob 的子元素的 author 元素。
author[last-name = "Bob" and first-name = "Joe"]
所有包含值为 Bob 的 <last-name> 子元素和值为 Joe 的<first-name> 子元素的 <author> 元素。
price[@intl = "Canada"]
上下文节点中所有 intl 属性等于 "Canada" 的 <price> 元素。
degree[position() < 3]
属于上下文节点子级的前两个 <degree> 元素。
p/text()[2]
上下文节点中每个 <p> 元素的第二个文本节点。
ancestor::book[1]
与上下文节点最接近的 <book> 上级。
ancestor::book[author][1]
与上下文节点最接近的 <book> 上级,并且此 <book> 元素包含 <author> 元素子级。
ancestor::author[parent::book][1]
当前上下文中最接近的 <author> 上级,并且此 <author>元素是 <book> 元素的子级。
 
 
附: 《XPath 语法的示例 XML 文件》
Xml代码  
<?xml version="1.0"?>  
<?xml-stylesheet type="text/xsl" href="myfile.xsl" ?>  
<bookstore specialty="novel">  
    <book style="autobiography">  
        <author>  
            <first-name>Joe</first-name>  
            <last-name>Bob</last-name>  
            <award>Trenton Literary Review Honorable Mention</award>  
        </author>  
        <price>12</price>  
    </book>  
    <book style="textbook">  
        <author>  
            <first-name>Mary</first-name>  
            <last-name>Bob</last-name>  
            <publication>  
                Selected Short Stories of  
                <first-name>Mary</first-name>  
                <last-name>Bob</last-name>  
            </publication>  
        </author>  
        <editor>  
            <first-name>Britney</first-name>  
            <last-name>Bob</last-name>  
        </editor>  
        <price>55</price>  
    </book>  
    <magazine style="glossy" frequency="monthly">  
        <price>2.50</price>  
        <subscription price="24" per="year" />  
    </magazine>  
    <book style="novel" id="myfave">  
        <author>  
            <first-name>Toni</first-name>  
            <last-name>Bob</last-name>  
            <degree from="Trenton U">B.A.</degree>  
            <degree from="Harvard">Ph.D.</degree>  
            <award>Pulitzer</award>  
            <publication>Still in Trenton</publication>  
            <publication>Trenton Forever</publication>  
        </author>  
        <price intl="Canada" exchange="0.7">6.50</price>  
        <excerpt>  
            <p>It was a dark and stormy night.</p>  
            <p>  
                But then all nights in Trenton seem dark and stormy to  
                someone who has gone through what  
                <emph>I</emph>  
                have.  
            </p>  
            <definition-list>  
                <term>Trenton</term>  
                <definition>misery</definition>  
            </definition-list>  
        </excerpt>  
    </book>  
    <my:book xmlns:my="uri:mynamespace" style="leather" price="29.50">  
        <my:title>Who's Who in Trenton</my:title>  
        <my:author>Robert Bob</my:author>  
    </my:book>  
</bookstore>  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值