📜  XPath-表达式(1)

📅  最后修改于: 2023-12-03 15:21:19.337000             🧑  作者: Mango

XPath-表达式

简介

XPath是一种用于在XML或HTML文档中选择节点的语言。它是W3C的一个标准,可以在多种编程语言中使用。

XPath的表达式由轴、节点测试、运算符和函数构成,可以用于定位、选取和操作文档中的节点。

基本语法

XPath的基本语法如下:

nodetest[predicate]/nodetest[predicate]/...

其中,nodetest是一个节点测试,用于匹配文档中的节点,predicate是一个谓词,用于进一步筛选匹配到的节点。

例如,以下xpath表达式可以匹配文档中所有的book节点:

//book

XPath中的轴用于指定节点之间的关系,有以下几种轴:

  • ancestor:所有祖先节点
  • ancestor-or-self:所有祖先节点及当前节点
  • attribute:所有属性节点
  • child:所有子节点
  • descendant:所有后代节点
  • descendant-or-self:所有后代节点及当前节点
  • following:当前节点之后所有节点
  • preceding:当前节点之前所有节点
  • following-sibling:当前节点之后的兄弟节点
  • preceding-sibling:当前节点之前的兄弟节点
  • self:当前节点

XPath中的轴可以通过加上::来使用,例如,以下xpath表达式可以匹配文档中所有book节点后面的title节点:

//book/following-sibling::title
节点测试

XPath中的节点测试用于匹配文档中的节点。常用的节点测试有以下几种:

  • node():匹配任意节点
  • *:匹配任意元素节点
  • @*:匹配任意属性节点
  • text():匹配文本节点
  • comment():匹配注释节点
  • processing-instruction():匹配处理指令节点

XPath中的节点测试可以组合使用,例如,以下xpath表达式可以匹配文档中所有的book元素节点下的文本节点:

//book/text()
谓词

XPath中的谓词用于进一步筛选匹配到的节点。谓词是放在方括号中的条件表达式,可以使用运算符、函数和节点测试等。

例如,以下xpath表达式可以匹配文档中所有第2个book节点:

//book[2]
运算符

XPath中常用的运算符如下:

  • =:等于
  • !=:不等于
  • <:小于
  • >:大于
  • <=:小于等于
  • >=:大于等于
  • and:逻辑与
  • or:逻辑或
  • mod:取模
  • +:加
  • -:减
  • *:乘
  • /:除

例如,以下xpath表达式可以匹配文档中所有价格在10到20之间的book节点:

//book[price > 10 and price < 20]
函数

XPath中常用的函数如下:

  • last():返回文档中最后一个节点的序号
  • position():返回当前节点在其父节点中的位置
  • count():返回匹配到的节点数量
  • concat():拼接字符串
  • substring():提取子串
  • lower-case():转换为小写
  • upper-case():转换为大写

例如,以下xpath表达式可以匹配文档中所有价格小于15的book节点,并返回其titleprice

//book[price < 15]/concat(title, ': ', price)
示例

以下是一个示例XML文档:

<?xml version="1.0"?>
<library>
  <book>
    <title>Java Programming</title>
    <author>John Smith</author>
    <price>20</price>
  </book>
  <book>
    <title>Python Programming</title>
    <author>Jane Doe</author>
    <price>15</price>
  </book>
  <book>
    <title>C++ Programming</title>
    <author>Mike Johnson</author>
    <price>25</price>
  </book>
</library>

以下是一些常用的xpath表达式:

  • //book:匹配所有的book节点
  • //book/title:匹配所有的book节点下的title节点
  • //book[@price > 20]:匹配所有价格大于20的book节点
  • //book[1]/title:匹配第1个book节点下的title节点
  • //book[count(*) = 3]:匹配所有子节点数量为3的book节点
  • //book[contains(title, 'Java')]:匹配所有title节点中包含Java的book节点
参考资料
  • XPath:W3C的XPath标准文档。
  • XPath 1.0 教程:w3school的XPath教程,详细介绍了XPath的语法和用法。
  • XPath 语法:菜鸟教程的XPath语法介绍。