zoukankan      html  css  js  c++  java
  • <转自MSDN>XPath 表达式是使用下表中所示的运算符和特殊字符

    /

    子运算符;选择左侧集合的直接子级。此路径运算符出现在模式开头时,表示应从根节点选择该子级。

    (注意不能误认为它就代表根节点)

    //

    递归下降;在任意深度搜索指定元素。此路径运算符出现在模式开头时,表示应从根节点递归下降。

    .

    指示当前上下文。

    ..

    当前上下文节点的父级。

    *

    通配符;选择所有元素,与元素名无关。

    @

    属性;属性名的前缀。

    @*

    属性通配符;选择所有属性,与名称无关。

    :

    命名空间分隔符;将命名空间前缀与元素名或属性名分隔。

    ( )

    为运算分组,明确设置优先级。

    [ ]

    应用筛选模式。

    [ ]

    下标运算符;用于在集合中编制索引。

    +

    执行加法。

    -

    执行减法。

    div

    根据 IEEE 754 执行浮点除法。

    *

    执行乘法。

    mod

    从截断除法返回余数。

    此表不包括布尔运算符和集运算符,这两个运算符在布尔、比较和集表达式集运算中列出。

    优先级顺序(从最高优先级到最低优先级)的定义如下表所示。
    优先级         字符                                    分组

          

    1

    ( )

    分组

    2

    [ ]

    筛选器

    3

    / //

    路径运算

    分组运算符 () 仅适用于顶级路径表达式。例如,(//author/degree | //author/name) 是有效的分组运算,但 //author/(degree | name) 不是。

    筛选模式运算符 ([]) 的优先级高于路径运算符(///)。例如,表达式 //comment()[3] 选择相对于文档中任意位置备注的父级索引等于 3 的所有备注。此表达式与表达式 (//comment())[3] 不同,后者选择相对于父级的所有备注集中的第三个备注。前一个表达式可以返回多个备注,后一个表达式只能返回一个备注。

    这些运算符和特殊字符在本参考文档中详细说明。

    特定类型的元素集合可以使用路径运算符(///)确定。这些运算符根据其参数的“左侧”集合进行选择,“右侧”集合表示要选择的元素。子运算符 (/) 从左侧集合的直接子级中选择,而子代运算符 (//) 从左侧集合的任意子代中选择。因此,// 可以作为一个或多个层次级别的替代。

    注意,路径运算符在执行查询时更改上下文。通过将路径运算符连接在一起,用户可以遍历文档树。

    表达式 引用

    author/first-name

    当前上下文节点的 <author> 元素中的所有 <first-name> 元素。

    bookstore//title

    <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> 元素。

    */*

    当前上下文的所有孙级元素。

    my:book

    my 命名空间中的 <book> 元素。

    my:*

    my 命名空间中的所有元素。

    注意,不支持模式 *:book

    XPath 使用 @ 符号表示属性名。属性和子元素应公平对待,两种类型之间的功能应尽可能相当。

    注意

    属性不能包含子元素,所以,如果对属性应用路径运算符,将出现语法错误。此外,不能对属性应用索引,因为根据定义,不为属性定义任何顺序。

    示例

    表达式 引用

    @style

    当前元素上下文的 style 属性。

    price/@exchange

    当前上下文中 <price> 元素的 exchange 属性。

    Xml
     
    book/@style
                

    所有 <book> 元素的 style 属性。

    注意,以下示例无效,因为属性不能包含任何子级。

     
    price/@exchange/total

    使用 @* 可以返回某个元素的所有属性。对于将属性作为记录中的字段的应用程序,此表达式可能非常有用。

    示例

    表达式 引用

    @*

    当前上下文节点的所有属性。

    @my:*

    my 命名空间中的所有属性。不包括 my 命名空间中的元素的未限定属性。

    注意,不支持模式 @*:title

  • 相关阅读:
    AtCoder Beginner Contest 184 ABCDE 题解
    Codeforces Round #685 (Div. 2) C. String Equality 思维
    Codeforces Round #682 (Div. 2) ABC 题解
    Gym 102215 & 队内训练#5
    【题解】 CF436E Cardboard Box 带悔贪心
    【题解】 「NOI2019」序列 模拟费用流 LOJ3158
    【笔记】 exlucas
    【题解】 「HNOI2018」毒瘤 树形dp+动态dp+容斥+格雷码 LOJ2496
    【笔记】 异或高斯消元方案数
    【笔记】 用生成函数推二项式反演
  • 原文地址:https://www.cnblogs.com/symbol441/p/993660.html
Copyright © 2011-2022 走看看