• XPath语法


    XPath使用路径表达式来选取XML文档中的节点或节点集。节点是通过沿着某个路径(path)或者步(step)来选取的。


    XML实例文档

    我们将在下面的例子中使用这个XML文档。

    <?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>

    选取节点

    XPath使用路径表达式在XML文档中选取节点。节点是通过沿着某个路径或者step来选取的。

    下面列出了最有用的路径表达式:

    表达式 描述
    nodename 选取此节点的所有子节点
    / 从根节点选取
    // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
    . 选取当前节点
    .. 选取当前节点的父节点
    @ 选取属性

    实例

    在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

    路径表达式 结果
    bookstore 选取bookstore元素的所有子节点
    /bookstore

    选取bookstore根元素

    注释:假如路径起始于正斜杠( / ),则此路径为到某元素的绝对路径!

    bookstore/book 选取所有属于bookstore的子元素的book元素。
    //book 选取所有book子元素,而不管它们在文档中的位置。
    bookstore//book 选择所有属于bookstore元素的后代的book元素,而不管它们位于bookstore之下的什么位置。
    //@lang 选取所有名为lang的属性。


    谓语(Predicates)

    谓语用来查找某个特定的节点或者包含某个指定的值的节点。

    谓语被嵌在方括号中。

    实例

    在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

    路径表达式 结果
    /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。


    选取未知节点

    XPath通配符可用来选取未知的XML元素。

    通配符 描述
    * 匹配任何元素节点
    @* 匹配任何属性节点
    node() 匹配任何类型的节点

    实例

    在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

    路径表达式 结果
    /bookstore/* 选取bookstore元素的所有子节点
    //* 选取文档中的所有元素
    //title[@*] 选取所有带有属性的title元素。

    选取若干路径

    通过在路径表达式中使用“|”运算符,您可以使用选取若干个路径。

    实例

    在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

    路径表达式 结果
    //book/title | //book/price 选取所有book元素的tilte和price元素。
    //title | //price 选取所有文档中的title和price元素。
    /bookstore/book/title | //price 选取所有属于bookstore元素的book元素的title元素,以及文档中所有的price元素。


    XPath是一门非图灵完备的、没有副作用的、弱类型以及很难看的语言,用于把一个XML的某个节点转换成一些节点。

    Context:上下文。指的是使用指定条件正在搜索的XML路径的节点。

    ContextList:被PREDICATE过滤的列表

    UNIT

    Name                                                          :节点的名字必须是Name

    Namespace:*                                            :节点的namespace必须是Namespace

    *                                                                   :任何节点

    @Name                                                      :节点必须是属性而且名字必须是Name

    @*                                                               :任何属性

    comment()                                                 :注释节点

    node()                                                         :任何节点

    text()                                                           :文字节点

    processing-instruction(Name?)          processing-instruction节点,名字必须是Name(可选)

    PREDICATE

     XPATH                                                          ContextXPATH非空

     VALUE(<|>|=|<=|>=|!=)VALUE            :比较操作符

     VALUE                                                          :位置是VALUE,从1开始

     PREDICATE(and|or)PREDICATE            :逻辑操作符

     not(PREDICATE)                                        :逻辑操作符

    VALUE

     常数

      VALUE(+|-|*|div|mod)VALUE               :操作符

     (VALUE)                                                       VALUE

     count(XPATH)                                            :数目

     last()                                                            ContextList的数目

     local-name(XPATH?)                                :返回没有namespace的名字,没参数则为ContextList

     name(XPATH?)                                          :返回全名,没参数则为ContextList

     position()                                                    ContextContextList中的位置

      concat(Str1,Str2[,Str3…])                       :连接字符串

      contains(Big,Small)                                  :返回Big中是否出现Small

      normalize-space(String)                         :将String头尾的空白去掉,中间的连续空白使用一个空格代替

     starts-with(Big,Small)                             :返回Big是否由Small开头

     string(Object)                                            :类型转换,如果ObjectNodeList则将NodeList变为NodeList[1],然后讲NodeList所有子节点的值连接起来

     string-length(String)                                :长度

     substring(String,Start,Length)              :子串

     substring-after(Big,Small)                      :返回Big中位于Small后的部分

     substring-before(Big,Small)                            :返回Big中位于Small之前的部分

     translate(A,B,C)                                       :将A中的所有B[i]换成C[i]B[position()>length(C)]换为空字符串

     boolean(X)                                                  :类型转换,非0true,非空true

     false()                                                          :返回false

     true()                                                           :返回true

      ceiling,floor,round(X)                               :转换浮点

     sum(XPATH)                                                :所有值相加

     number(X)                                                  :类型转换,1true0false,其他类型转string后转number

    XPATH

     .                                                                     Context

     ..                                                                   Context的父节点

     /                                                                    :根节点

     /UNIT                                                          :根节点中满足UNIT的子节点,UNITContext为根节点

     XPATH /UNIT                                             XPATH中满足UNIT的子节点,UNITContextNODELIST的其中一项

     //UNIT                                                         :根节点中满足UNIT的直接或间接子节点,UNITContext为根节点

     XPATH //UNIT                                            XPATH中满足UNIT的直接或间接子节点,UNITContextXPath的其中一项

     (XPATH)                                                        XPATH

      XPATH [PREDICATE]                                 :筛选

     Axis::XPATH

    ancestor                                                XPATH的直接或间接祖先

    ancestor-or-self                                    ancestorXPath

    attribute                                                 XPATH的所有属性

    child                                                         XPATH的所有子节点(包括属性)

    descendant                                            XPATH的直接或间接子节点

    descendant-or-self                              descendantXPATH

    following                                                 :所有完全处于XPATH后的节点

    following-sibling                                   following中与自己处于同一层次的节点

    preceding                                                        :所有完全处于XPATH之前的节点

    preceding-sibling                                  preceding中与自己处于同一层次的节点

    self                                                           XPATH

    parent                                                     XPATH的父节点

     XPATH|XPATH                                            :并集

    优先级:

     () > :: > [] > /,//  > |

    关于作者: 王昕(QQ:475660) 在广州工作生活30余年。十多年开发经验,在Java、即时通讯、NoSQL、BPM、大数据等领域较有经验。
    目前维护的开源产品:https://gitee.com/475660
  • 相关阅读:
    CA 证书和数字证书
    PHP获取不了内网IP?
    站点速度检测工具
    Mac地址
    交互机和路由器区别
    关于实体店收银系统和cookie实现登录状态
    Python3 的序列
    Python3 字符串格式化
    Python3 的元组
    Python3 的列表
  • 原文地址:https://www.cnblogs.com/starcrm/p/1385277.html
Copyright © 2020-2023  润新知