美文网首页
Xpath 简单学习

Xpath 简单学习

作者: jeneen1129 | 来源:发表于2021-05-08 10:05 被阅读0次

    <meta charset="utf-8">

    前情提要

    官网:https://www.w3school.com.cn/xpath/index.asp
    chrome 浏览器开发者(f12)elements 中 直接实践:

    1. 简介

    Xpath 是中 查找 xml 文档内信息的语言。XPath 被设计为供 XSLT、XPointer 以及其他 XML 解析软件使用。

    2. 节点(Node)

    在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。

    节点类型 类型描述
    元素 <node></node> 这样一对的都是元素节点
    属性 描述元素属性的节点,例如<node lang="en"></node> 中 lang="en" 就为属性节点,属性值是en, 属性名称是 lang
    文本
    命名空间
    处理指令
    注释
    文档节点或者根节点 树的根,最外层的Node

    节点之间的关系有父子、同胞(兄弟)、先辈(前辈)、后代等。

    3. 语法

    - path

    1)选取节点

    节点是通过 path 或者 steps 来选取的。

    表达式 描述
    nodename 选取此节点的所有子节点。
    / 从根节点选取。
    // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
    . 选取当前节点。
    .. 选取当前节点的父节点。
    @ 选取属性。
    * 匹配任何元素节点。
    @* 匹配任何属性节点。
    node() 匹配任何类型的节点。

    2)使用谓语:被放到方括号中

    路径表达式 结果
    /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)合并两个路径结果 :“|”运算符

    示例: //book/title | //book/price

    - steps

    1. 步(step)
      步(step)包括:
      轴(axis): 定义所选节点与当前节点之间的树关系
    轴名称 结果
    ancestor 选取当前节点的所有先辈(父、祖父等)。
    ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
    attribute 选取当前节点的所有属性。
    child 选取当前节点的所有子元素。
    descendant 选取当前节点的所有后代元素(子、孙等)。
    descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
    following 选取文档中当前节点的结束标签之后的所有节点。
    namespace 选取当前节点的所有命名空间节点。
    parent 选取当前节点的父节点。
    preceding 选取文档中当前节点的开始标签之前的所有节点。
    preceding-sibling 选取当前节点之前的所有同级节点。
    self 选取当前节点。

    节点测试(node-test): 识别某个轴内部的节点
    零个或者更多谓语(predicate): 更深入地提炼所选的节点集
    步的语法: 轴名称::节点测试[谓语]

    示例:

    例子 结果
    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 孙节点。

    4. Xpath 运算符

    XPath 表达式可返回节点集、字符串、逻辑值以及数字。

    运算符 描述 实例 返回值
    | 计算两个节点集 //book | //cd 返回所有拥有 book 和 cd 元素的节点集
    + 加法 6 + 4 10
    - 减法 6 - 4 2
    * 乘法 6 * 4 24
    div 除法 8 div 4 2
    = 等于 price=9.80 如果 price 是 9.80,则返回 true。如果 price 是 9.90,则返回 false。
    != 不等于 price!=9.80 如果 price 是 9.90,则返回 true。如果 price 是 9.80,则返回 false。
    < 小于 price<9.80 如果 price 是 9.00,则返回 true。如果 price 是 9.90,则返回 false。
    <= 小于或等于 price<=9.80 如果 price 是 9.00,则返回 true。如果 price 是 9.90,则返回 false。
    > 大于 price>9.80 如果 price 是 9.90,则返回 true。如果 price 是 9.80,则返回 false。
    >= 大于或等于 price>=9.80 如果 price 是 9.90,则返回 true。如果 price 是 9.70,则返回 false。
    or price=9.80 or price=9.70 如果 price 是 9.80,则返回 true。如果 price 是 9.50,则返回 false。
    and price>9.00 and price<9.90 如果 price 是 9.80,则返回 true。如果 price 是 8.50,则返回 false。
    mod 计算除法的余数 5 mod 2 1

    5.Xpath 函数:

    https://www.w3school.com.cn/xpath/xpath_functions.asp

    以上仅供学习

    相关文章

      网友评论

          本文标题:Xpath 简单学习

          本文链接:https://www.haomeiwen.com/subject/erqedltx.html