首页 > 编程语言 >让python的lxml模块的xpath支持正则表达式

让python的lxml模块的xpath支持正则表达式

时间:2023-07-05 11:35:36浏览次数:42  
标签:xpath regex lxml python text 元素 elements

python的lxml模块是处理xml文档的比较好用的工具, 其中的xpath函数可以检索指定的元素, 但是它不支持正则表达式, 比如某个属性的值是否匹配某个正则表达式, 就没有办法实现.
不过可以利用它的自定义函数扩展功能来实现, 如下代码所示:

import re
from lxml import etree
from lxml.etree import XPath, FunctionNamespace

def regex(context, pattern, elements):
    # 确保我们有一个元素
    if not elements:
        return False
    if elements[0]=='': return False
    # 将元素转换为字符串
    string = str(elements[0])
    # 执行正则表达式匹配
    return re.search(pattern, string) is not None

ns = FunctionNamespace(None)
ns['regex'] = regex


# 加载XML文件
tree = etree.parse('hierarchy.xml')

# 使用XPath选择符合条件的元素
elements = tree.xpath('//*[regex("看小视频",@text)]')
#elements = tree.xpath('//*[fn:matches(@text,"看小视频")]',namespaces={"fn": "http://www.w3.org/2005/xpath-functions"})

# 遍历选择到的元素
for element in elements:
    # 处理元素
    print(element.text)

这里面需要注意的是自定义函数regex的参数, 其中第一个参数context, 描述了xpath的当前执行环境, 比如当前节点等, 后面的两个参数才是用户传进去的参数, 最后一个参数要注意, 它是一个数组, 包含你指定的参数值, 比如@text表示元素的text属性的值, 对于没有这个属性的元素, 传进去的是一个空列表, 否则传进去的是text元素的值的列表.

标签:xpath,regex,lxml,python,text,元素,elements
From: https://www.cnblogs.com/huzhongqiang/p/17528020.html

相关文章

  • [-002-]-Python3+Unittest+Selenium Web UI自动化测试之显示等待WebDriverWait
    1、WebDriverWait基本用法引入包#文件引入fromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasEC每0.5s定位ID为userid的元素,如果定位成功,执行下面的代码;直至15s超时抛出异常可用来检查页面元素是......
  • python 导入错误 ImportError: Unable to import required dependencies: numpy
    python导入错误ImportError:Unabletoimportrequireddependencies:numpy  python3.9对应的numpy版本  参考:https://blog.csdn.net/guigenyi/article/details/126248488https://wenku.csdn.net/answer/0366fcc7857bccdefced2aaa09d7b02chttps://wenku.csdn.n......
  • python解析json数据
    python解析json数据demodata={"name":"John","age":30,"hobbies":["reading","running","swimming"],"scores":[85,90,95]}forkey,valueindata.items()......
  • python-contextlib上下文管理器
    pythoncontextlib上下文管理器python-contextlib上下文管理器两大作用:--可以以一种更加优雅的方式,操作(创建/获取/释放)资源,如文件操作、数据库连接;--可以以一种更加优雅的方式,处理异常;读取文件的一般流程#打开文件f=open('file.txt')try:forlineinf:......
  • XMU Python语法
     题解:这道题重点是行号和列号!千万!别搞反了,还有就是用dx和dy数组表示顺时针转动1dx=[-1,0,1,0]2dy=[0,1,0,-1]3n,m=map(int,input().split())#n行m列4x,y,d=0,0,156#注意x为行标y为列标78#先执行前然后执行......
  • Python中使用支付宝支付
    准备#支付宝文档https://opendocs.alipay.com/open/270/105898?pathHash=b3b2b667#在沙箱环境下实名认证https://openhome.alipay.com/platform/appDaily.htm?tab=info#完成RSA密钥生成#1下载密钥工具#2生成密钥https://opendocs.alipay.com/common/......
  • Python基础37 基于tcp、udp套字编程、粘包现象、struct模块
    基于tcp协议的套接字编程(sochet编程)什么是socket?通常翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把tcp/ip层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中。套接字分类:AF_UNIX:用在局域网中AF_INET:用在互联网中客户端和服务端启动顺序......
  • python给多页excel工作表写跳转目录及回转链接
    1fromopenpyxlimportload_workbook2#fromopenpyxl.drawing.textimportParagraph,RegularTextRun3fromopenpyxl.worksheet.hyperlinkimportHyperlink4#fromopenpyxl.utilsimportget_column_letter56#打开现有的工作簿7workbook=load_workbo......
  • python之pip
    #####################   查看当前环境已经安装了哪些包:piplist   查看安装包详情  安装pip_search    使用pip_search           ########################......
  • python索引
    变量名[]正向数时是从零开始,反向是从-1开始切片变量[头下标:尾下标](不包括尾下标所代表的字符)变量名[:]:不指定头下标和尾下标时代表获取整个字符串变量名[1:]:不指定尾下标时代表从指定的头下标到末尾变量名[:5]:不指定头下标时代表从头开始到尾下标指定的字符但不包含尾下标所......