美文网首页
XPath学习

XPath学习

作者: 愤愤的有痣青年 | 来源:发表于2019-12-05 09:55 被阅读0次

    XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。可以使用该语法配合一些工具实现在网页中提取元素的目的.

    节点

    在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)
    如下示例:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <bookstore>
    
    <book>
      <title lang="en">Harry Potter</title>
      <author>J K. Rowling</author> 
      <year>2005</year>
      <price>29.99</price>
    </book>
    
    </bookstore>
    

    其中<bookstore>为文档节点, <title lang="en">Harry Potter</title>为元素节点,lang="en"为属性节点,Harry Potter为文本内容.

    节点关系

    • 父节点
      上述示例中,book节点为title节点的父节点.

    • 子节点
      上述示例中,title节点为book节点的子节点.

    • 同胞节点
      上述示例中,title节点为author节点的同胞节点.

    • 先辈节点
      节点的父节点或父节点的父节点等,例如bookbookstore都是title的先辈节点.

    • 后代节点
      节点的子节点或子节点的子节点等,例如titlebookbookstore子节点

    语法

    • 选取节点
    语法 说明
    nodename 选取名为nodename下的所有节点
    / 从根节点选择
    // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
    . 选取当前节点
    .. 选取当前节点的父节点
    @ 选择属性
    * 匹配任何元素节点。
    @* 匹配任何属性节点
    • 谓语,既筛选条件,写在方括号([])中间的表达式.
      • 示例
    路径表达式 说明
    /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。
    • 选取若干路径
      在路径表达式中可以使用|符号来使用多个表达式,例如//book[price>10]|book[@name],此表达式将选择所有price大于10或者带有name属性的节点

    轴可定义相对于当前节点的节点集。轴有以下类型:

    轴表达式 说明
    ancestor 选取当前节点的所有先辈(父、祖父等)。
    ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
    attribute 选取当前节点的所有属性。
    child 选取当前节点的所有子元素。
    descendant 选取当前节点的所有后代元素(子、孙等)。
    descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
    following 选取文档中当前节点的结束标签之后的所有节点。
    namespace 选取当前节点的所有命名空间节点。
    parent 选取当前节点的父节点。
    preceding 选取文档中当前节点的开始标签之前的所有节点。
    preceding-sibling 选取当前节点之前的所有同级节点。
    self 选取当前节点。
    • 位置路径表达式
      绝对位置路径:
      /step/step/...
      相对位置路径:
      step/step/...

    • 步(step)
      其语法为:
      轴名称::节点[谓语]

    • 示例

    表达式 说明
    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 孙节点。

    XPath 运算符

    运算符 描述 实例
    | 计算两个节点集 //book| //cd
    + 加法 6 + 4
    - 减法 6 - 4
    * 乘法 6 * 4
    div 除法 8 div 4
    = 等于 price=9.80
    != 不等于 price!=9.80
    < 小于 price<9.80
    <= 小于或等于 price<=9.80
    > 大于 price>9.80
    >= 大于或等于 price>=9.80
    or price=9.80 or price=9.70
    and price>9.00 and price<9.90
    mod 计算除法的余数 5 mod 2

    相关文章

      网友评论

          本文标题:XPath学习

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