XPath【详细解读】

目录

XPath是什么呢?

Xpath的核心功能与特点

XPath的应用

XPath中的路径表达式与节点以及相关语法

XPath中的节点

XPath中的其他节点术语

节点间的关系

XPath路径表达式的语法

选取节点

谓语(Predicates)

选取未知节点

选取若干路径

XPath中的轴(Axes) 

 轴的相关案例

XPath 运算符​

逻辑运算符​

示例​

逻辑与运算符 and​

逻辑或运算符 or​

逻辑非运算符 not()​

比较运算符​

示例​

等于运算符 =​

不等于运算符 !=​

小于运算符 <​

小于或等于运算符 <=​

大于运算符 >​

大于或等于运算符 >=​

算术运算符​

示例​

加法运算符 +​

减法运算符 -​

乘法运算符 *​

除法运算符 div​

模数运算符 mod​

 运用XPath分析页面的示例

结语


XPath是什么呢?

XPath,全称XML Path Language,是一种在XML文档中查找信息的语言,它被设计用来在XML结构中导航,尽管它同样适用于HTML文档。XPath最初于1999年11月16日成为W3C标准,旨在支持XSLT、XPointer等技术,通过路径表达式来选取XML文档中的节点或节点集。

Xpath的核心功能与特点

  • 路径表达式:XPath使用类似文件系统路径的表达式来定位文档中的元素和属性。例如,/root/child 会选取根节点下的直接子节点child。
  • 选择节点:XPath能精确选择元素、属性、文本节点等,支持绝对路径(如 /element)和相对路径(如 ./element 或 element)。
  • 条件筛选:通过谓词(方括号内的表达式),可以基于条件选择节点,如 //book[@author='J.K. Rowling'] 选取所有作者为J.K. Rowling的book节点。
  • 节点轴:XPath提供节点轴(如child::, parent::, self::等),帮助在节点树中导航。
  • 函数支持:XPath提供了丰富的函数库,用于字符串处理、数值计算、节点测试等,如count(), normalize-space(), contains()等。
  • 表达式组合:可以使用逻辑运算符(如 and, or)和算术运算符来组合复杂的表达式。

XPath的应用

  • 在Web自动化测试中的应用:XPath在Selenium等工具中广泛用于Web元素的定位,提供了一种灵活的定位策略,尤其是在页面结构复杂时。
  • 在爬虫技术中的应用:XPath是数据提取的关键工具,通过解析HTML文档,精准提取所需信息。

XPath中的路径表达式与节点以及相关语法

XPath路径表达式是XPath语言的核心部分,用于在XML或HTML文档中定位特定的节点。

XPath中的节点

XPath中的节点是XML文档结构的基本单位,它们构成了XML文档的树状结构。以下是XPath中七种类型的节点及其简要说明:

  1. 元素节点(Element):XML文档中最重要的节点类型,代表XML结构中的标签,如<book>、<title>等。

  2. 属性节点(Attribute):附属于元素节点的,提供额外信息。例如,<title lang="en">中的lang="en"就是属性节点。

  3. 文本节点(Text):元素节点内部的文本内容,例如<title>Harry Potter</title>中的"Harry Potter"。

  4. 命名空间节点(Namespace):定义元素和属性的命名空间,虽然在日常XPath使用中较少直接操作。以下为使用XPath查询带有命名空间的元素的例子。

    ​
    from lxml import etree
     
    # 定义命名空间
    ns = {'n': 'http://www.example.com/ns'}
     
    # 加载 XML 字符串
    xml_data = """
    <root xmlns:n="http://www.example.com/ns">
        <n:element>Content</n:element>
    </root>
    """
    
    root = etree.fromstring(xml_data)
     
    # 使用 XPath 查询
    elements = root.xpath('n:element', namespaces=ns)
     
    # 输出元素内容
    for element in elements:
        print(element.text)
    
    #Content
    
    ​
  5. 处理指令节点(Processing Instruction):XML文档中用于指导处理程序的指令,如<?xml-stylesheet type="text/xsl" href="style.xsl"?>。

  6. 注释节点(Comment):XML文档中的注释部分,如<!-- 这是一个注释 -->。

  7. 文档(根)节点(Document Node 或 Root Node):整个XML文档的顶级节点,其他所有节点都是其子节点。

XPath中的其他节点术语

基本值(Atomic value)

基本值又称原子值,基本值是无父或无子的节点。

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

在这个XML文档中,以下是一些基本值节点的例子:

  • "Harry Potter":这是<title>元素的文本内容。
  • "J K. Rowling":这是<author>元素的文本内容。
  • "en":这是<title>元素的lang属性的值。
  • "2005":这是<year>元素的文本内容。
  • "29.99":这是<price>元素的文本内容。

项目(Item)

项目是基本值或节点

节点间的关系

在XPath中,节点间的关系是理解和使用XPath表达式的关键。以下是一个基于XML文档的示例,来说明几种主要的节点关系:

<bookstore>
  <book>
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book>
    <title lang="en">Learning XPath</title>
    <author>John Doe</author>
    <year>2020</year>
    <price>19.99</price>
  </book>
</bookstore>

节点间关系的例子

  1. 父节点(Parent)

    • 示例:<title>元素的父节点是<book>。
    • XPath表达式:从<title>元素选择其父节点,可以表示为./parent::book。
  2. 子节点(Children)

    • 示例:<book>元素有四个子节点:<title>、<author>、<year>和<price>。
    • XPath表达式:从<bookstore>元素选择所有<book>的子节点,可以表示为/bookstore/book/*。
  3. 同胞(Sibling)

    • 示例&#x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软糖工程001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值