首页 > 其他分享 >xpath常用的定位规则方法解析

xpath常用的定位规则方法解析

时间:2024-06-07 10:34:20浏览次数:22  
标签:xpath 定位 XPath 元素 选择 tagname 解析 节点

 

XPath 是一种在 XML 文档中查找信息的语言,它同样适用于 HTML 文档,因为 HTML 可以被看作是一种特殊的 XML。在 XPath 中,你可以使用各种表达式来定位元素。以下是 XPath 中元素定位的一些常见规则和方法:

1. 基本路径

  • / 表示根元素。
  • // 表示选择文档中的节点,而不考虑它们的位置。
  • . 表示当前节点。
  • .. 表示父节点。

2. 通过标签名定位

  • tagname 选择所有名为 tagname 的子元素。
  • //tagname 选择所有名为 tagname 的元素,不论它们位于文档中的何处。

3. 通过属性定位

  • [@attributename] 选择带有名为 attributename 的属性的元素。
  • [@attributename='value'] 选择带有名为 attributename 的属性且属性值等于 value 的元素。
  • [attributename1 and attributename2] 选择同时满足多个条件的元素。

4. 文本内容定位

  • contains(text(), 'substring') 选择文本内容包含 substring 的元素。
  • text()='exactstring' 选择文本内容完全等于 exactstring 的元素。

5. 层级和位置定位

  • parent::tagname 选择父节点为 tagname 的所有元素(XPath 2.0)。
  • child::tagname 选择所有名为 tagname 的子元素(可以简写为 tagname)。
  • ancestor::tagname 选择所有祖先节点为 tagname 的元素。
  • descendant::tagname 选择所有后代节点为 tagname 的元素(可以简写为 //tagname)。
  • tagname[n] 选择第 n 个 tagname 元素(n 从 1 开始)。
  • tagname[last()] 选择最后一个 tagname 元素。
  • tagname[position()=n] 选择位置为 n 的 tagname 元素。

6. 逻辑操作符

  • andor 和 not() 可以在 XPath 表达式中用于组合多个条件。

7. 通配符

  • * 匹配任何元素节点。
  • @* 匹配任何属性节点。

8. 命名空间

  • 如果你的 XML 或 HTML 文档使用了命名空间,你可能需要使用命名空间前缀来定位元素,例如 prefix:tagname

9. 函数

  • XPath 提供了许多函数,如 last()position()concat()starts-with()substring() 等,这些函数可以在 XPath 表达式中用于更复杂的条件判断或字符串操作。

10. 示例

  • //div[@class='content'] 选择所有 class 属性值为 content 的 div 元素。
  • //a[contains(text(),'点击这里')] 选择文本内容包含“点击这里”的所有 a 元素。
  • //form[@id='loginForm']/input[1] 选择 id 为 loginForm 的 form 元素中的第一个 input 子元素。

注意事项

  • XPath 是大小写敏感的。
  • 在使用 XPath 表达式时,请确保它与文档的当前结构相匹配。
  • 不同的 XPath 引擎可能支持不同的 XPath 版本(XPath 1.0、XPath 2.0 等),因此某些表达式可能在某些环境中不起作用。
  • 在 Web 自动化和爬虫中,XPath 是一种常用的元素定位方式,但也要注意它可能不如其他方式(如 CSS 选择器)稳定或高效。

 

//本文来自文心一言

标签:xpath,定位,XPath,元素,选择,tagname,解析,节点
From: https://www.cnblogs.com/hqsbrx/p/18236696

相关文章

  • Lru在Rust中的实现, 源码解析
    LRU(LeastRecentlyUsed)是一种常用的页面置换算法,其核心思想是选择最近最久未使用的页面予以淘汰。LRU算法原理基本思想:LRU算法基于一个假设,即如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很低。因此,当缓存空间不足时,算法会选择最久未使用的数据进行......
  • 应用解析 | 面向智能网联汽车的产教融合解决方案
     背景介绍     随着科技的飞速发展,智能网联汽车已成为汽车产业的新宠,引领着未来出行的潮流。然而,行业的高速发展也带来了对高素质技术技能人才的迫切需求。为满足这一需求,推动教育链、人才链与产业链、创新链的深度融合,经纬恒润推出产教融合相关方案,旨在通过教育链与产......
  • C++Primer Plus第12章类和动态内存分配--再谈定位new运算符----12.8
    12.5.3再谈定位new运算符本书前面介绍过,定位new运算符让您能够在分配内存时能够指定内存位置。第9章从内置类型的角度讨论了定位new运算符,将这种运算符用于对象时情况有些不同,程序清单12.8使用了定位new运算符和常规new运算符给对象分配内存,其中定义的类的构造函数......
  • C++Primer Plus第12章类和动态内存分配--再谈定位new运算符----12.9
    该程序使用定位new运算符在相邻的内存单元中创建两个对象,并调用了合适的析构函数。#pragmaregion12.9placenew2.cpp//placenew2.cpp--newplacementnew,nodelete#if1#include<iostream>#include<string>#include<new>usingnamespacestd;constintBU......
  • ads1299多通道数据格式解析
    一前记ads1299有多种通道格式的芯片。不同的通道,数据是不同的,具体格式怎么样呢?笔者在做产品的时候用到了,这里做一个备注吧。二格式解析其实,产品手册上讲的很清楚。这个格式是有24bit字节的头+24bit的单通道数据x多少通道。比如,需要四通道的数据采集,那就是:24bit+24bi......
  • 【栈】736. Lisp 语法解析
    本文涉及知识点栈LeetCode736.Lisp语法解析给你一个类似Lisp语句的字符串表达式expression,求出其计算结果。表达式语法如下所示:表达式可以为整数,let表达式,add表达式,mult表达式,或赋值的变量。表达式的结果总是一个整数。(整数可以是正整数、负整数、0)let表......
  • ffmpeg结构体解析-AVClass 和 AVOption
    AVClass先来看AVClass的结构如下:/***DescribetheclassofanAVClasscontextstructure.Thatisan*arbitrarystructofwhichthefirstfieldisapointertoan*AVClassstruct(e.g.AVCodecContext,AVFormatContextetc.).*/typedefstructAVClass{......
  • AI算力暴增至120TOPS 英特尔Lunar Lake架构解析
    随着下一代AIPC硬件核心LunarLake的发布,英特尔4年5个制程节点演进也逐步迎来富有革命性的时刻。面对AI时代指数级的算力需求增长,英特尔LunarLake,也就是第二代酷睿Ultra平台的CPU+GPU+NPU算力突破到了120TOPS,这将为基于其打造的AIPC赋予更加强劲、高效的AI性能体验。在台北电......
  • 深入解析:酷狗音乐播放时“dsound.dll无法找到”问题及解决方案
    在享受音乐之旅时,遇到“dsound.dll无法找到”的提示无疑给许多酷狗音乐爱好者带来了困扰。这一问题不仅阻碍了正常的音乐播放,也可能暗示着系统中存在潜在的安全隐患。本文将深入探讨该问题的原因,并提供一系列行之有效的解决策略,帮助用户顺利重启音乐之旅。问题背景dsound.dl......
  • BeanDefinition的资源定位过程
    正文当我们传入一个Spring配置文件去实例化FileSystemXmlApplicationContext时,可以看一下它的构造方法都做了什么。/***下面这4个构造方法都调用了第5个构造方法*@paramconfigLocation*@throwsBeansException*///configLocation包含了BeanDefiniti......