Python xml操作

XPath

XPath 是用于在 XML 或 HTML 文档中定位节点的语言。XPath 语法允许你使用路径表达式来选择节点。XPath 提供了多种功能,包括节点选择、过滤、计算等。

XPath表达式语法

语法说明示例
/选择根节点。/root # 选择根节点 root
//选择从当前节点开始的所有子节点,递归。//child # 选择所有 child 节点,不论其位置
.选择当前节点。./child # 选择当前节点的子节点 child
..选择当前节点的父节点。../parent # 选择当前节点的父节点 parent
*匹配所有节点。//*[contains(text(), "下一页")]  # 通配所有节点找到文本内容包含下一页的节点
@选择属性节点。/bookstore/book/@id # 选择所有 book 节点的 id 属性值
child:选择当前节点的子节点。/bookstore/child::book # 选择 bookstore 节点的所有子节点 book
descendant::选择当前节点的所有子孙节点。/bookstore/descendant::title # 选择 bookstore 节点的所有子孙节点 title
parent::选择当前节点的父节点。/bookstore/title/parent::book # 选择 title 节点的父节点 book
ancestor::选择当前节点的所有祖先节点。/bookstore/title/ancestor::bookstore # 选择 title 节点的所有祖先节点 bookstore
following-sibling::选择当前节点之后的所有兄弟节点。/bookstore/book/following-sibling::book # 选择 book 节点之后的所有兄弟 book 节点
preceding-sibling::选择当前节点之前的所有兄弟节点。/bookstore/book/preceding-sibling::book # 选择 book 节点之前的所有兄弟 book 节点
following::选择当前节点之后的所有节点。/bookstore/book/following::title # 选择 book 节点之后的所有 title 节点
preceding::选择当前节点之前的所有节点。/bookstore/book/preceding::title # 选择 book 节点之前的所有 title 节点
node()匹配所有类型的节点/bookstore/node() # 选择 bookstore 节点下的所有节点
text()匹配文本节点/bookstore/book/text() # 选择 book 节点下的文本内容
comment()匹配注释节点。/bookstore/comment() # 选择 bookstore 节点下的所有注释节点
processing-instruction()匹配处理指令节点/bookstore/processing-instruction() # 选择 bookstore 节点下的所有处理指令节点
[n]选择第 n 个节点(从 1 开始)/bookstore/book[1] # 选择第一个 book 节点
[last()]选择最后一个节点。/bookstore/book[last()] # 选择最后一个 book 节点
[position() > n]选择位置大于 n 的节点。/bookstore/book[position() > 2] # 选择位置大于 2 的 book 节点
[contains()]选择包含特定子串的节点。/bookstore/book[title[contains(., 'aaa')]] # 选择 title 包含 'aaa' 的 book 节点
[starts-with()]选择以特定子串开头的节点。/bookstore/book[title[starts-with(., 'aaa')]]  # 选择 title 以 'aaa' 开头的 book 节点
[string-length()]选择字符串长度符合条件的节点。/bookstore/book[not(string-length(title) < 5)]  # 选择 title 长度不小于 5 的 book 节点
and逻辑与操作。/bookstore/book[price < 20 and category = 'Science']  # 选择价格小于 20 且类别为 'Science' 的 book 节点
or逻辑或操作。/bookstore/book[price < 20 or category = 'Science']  # 选择价格小于 20 或类别为 'Science' 的 book 节点
not()逻辑非操作。/bookstore/book[not(price < 20)]  # 选择价格不小于 20 的 book 节点
contains()检查节点值是否包含指定子串。//title[contains(text(), 'aaa')]  # 选择文本内容包含 'aaa' 的 title 节点
starts-with()检查节点值是否以指定子串开头。//title[starts-with(text(), 'aaa')]  # 选择以 'aaa' 开头的 title 节点
substring-before()提取字符串中子串之前的部分。substring-before('XPath Tutorial', ' ')  # 返回 'XPath'
substring-after()提取字符串中子串之后的部分。substring-after('XPath Tutorial', ' ')  # 返回 'Tutorial'
normalize-space()移除节点值两端的空白字符,并将多个空白字符转换为单个空白字符。normalize-space('//title')  # 处理 title 节点的空白字符
|并集操作,用于合并多个 XPath 表达式的结果集。/bookstore/book/title | /bookstore/book/author # 选择所有 title 和 author 节点

lxml

lxml 是一个 Python 库,用于处理 XML 和 HTML 文档。它结合了 libxml2 和 libxslt 的强大功能,为 Python 提供了一个高效、灵活的接口。lxml 提供了对 XPath 的支持,使得可以在 XML 或 HTML 文档中执行 XPath 语法进行查询

安装 lxml

pip install lxml
lxml.etree 模块

解析和创建文档的方法

  • etree.parse(source, parser=None): 从文件、字符串或文件对象解析 XML 或 HTML 文档。
  • etree.fromstring(text, parser=None): 从字符串解析 XML 或 HTML 文档,返回一个Element对象。
  • etree.XML(text, parser=None): 解析 XML 字符串,返回一个Element对象。
  • etree.HTML(text, parser=None): 解析 HTML 字符串,返回一个Element对象。
  • etree.Element(tag, attrib={}, nsmap=None, **extra): 创建一个新的 XML 元素。
  • etree.ElementTree(element=None, parser=None): 创建一个新的 XML 或 HTML 元素树。
  • etree.XSLT(transform): 创建一个 XSLT 转换对象。
查找和操作元素的方法
  • element.xpath(path): 使用xpath语法。
  • element.find(path): 查找第一个匹配 XPath 表达式的子元素。
  • element.findall(path): 查找所有匹配 XPath 表达式的子元素。
  • element.findtext(path, default=None): 查找第一个匹配 XPath 表达式的子元素并返回其文本内容。
  • element.get(key, default=None): 获取指定属性的值。
  • element.set(key, value): 设置指定属性的值。
  • element.text: 获取或设置元素的文本内容。
  • element.attrib: 获取或设置元素的属性字典。
  • element.append(element): 向元素添加一个子元素。
  • element.remove(element): 从元素中移除一个子元素。
  • element.insert(index, element): 在指定位置插入一个子元素。
  • element.clear(): 清除元素及其所有子元素的内容。
序列化方法
  • etree.tostring(element, encoding=None, method='xml', with_comments=False, pretty_print=False): 将元素序列化为字符串。
  • etree.ElementTree.write(filename, encoding=None, xml_declaration=False, method='xml'): 将元素树写入文件。

示例:

from lxml import etree# html 字符串
html_data = '''
<div> <ul> <li class="item-1"><a href="link1.html">first item</a></li> <li class="item-1"><a href="link2.html">second item</a></li> <li class="item-inactive"><a href="link3.html">third item</a></li> <li class="item-1"><a href="link4.html">fourth item</a></li> <li class="item-0"><a href="link5.html">fifth item</a> </li></ul> 
</div>
'''
# 创建Element对象
html = etree.HTML(html_data)# 获取所有a标签的文本
print(html.xpath('//a/text()'))  # ['first item', 'second item', 'third item', 'fourth item', 'fifth item']# 获取所有a标签的链接
print(html.xpath('//a/@href'))  # ['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']# 获取包含 'third' 内容的文本
print(html.xpath('//*[contains(text(), "third")]/text()'))  # ['third item']# 遍历a节点的文本和链接
el_list = html.xpath('//a')
for el in el_list:print(f"{el.text} --- {el.attrib['href']}")  # first item --- link1.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/50287.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt国际化

1.pro文件里添加那个…ts. 2.开始-qt-qtxxxfor mingw.然后切换到pro所在的目录。 3.输入lupdate testguojihua.pro,会发现生成一个.ts的文件 4.开始–qt–Linguist,然后打开那个文件。 5.选择文件-发布&#xff0c;就能找到.qm文件了 6.使用这个qm文件

SpringBoot 使用easypoi.excel实现导入解析数据,并结合数据字典实现对数据的校验

在日常开发工作中避免不了的功能需求&#xff1a;导入Excel文件&#xff0c;然而导入文件流操作、对数据的校验有是件麻烦事&#xff0c;自从接触了easypoi后&#xff0c;觉得封装的很好&#xff0c;很简洁。 使用的主要依赖如下&#xff1a; <dependency><groupId&…

Spring -- 使用XML开发MyBatis

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 文章目录 MyBatis XML配置文件开发配置连接字符串和MyBatis写Mapper层代码添加mapper接口添加UserInfoXmLMapper.xml 操作数据库INSERTDELETE & UPDATE MyBatis XML配置文件开发 实际上,除…

谷粒商城实战笔记-64-商品服务-API-品牌管理-OSS前后联调测试上传

文章目录 1&#xff0c;拷贝文件到前端工程2&#xff0c;局部修改3&#xff0c;在品牌编辑界面使用上传组件4&#xff0c;OSS配置允许跨域5&#xff0c;测试multiUpload.vue完整代码singleUpload.vue完整代码policy.js代码 在Web应用开发中&#xff0c;文件上传是一项非常常见的…

MongoDB - 聚合阶段 $group 的使用

文章目录 1. 构造测试数据1. 示例 12. 示例23. 示例34. 示例45. 示例5 2. 构造测试数据1. 示例12. 示例23. 示例3 在 MongoDB 中&#xff0c;$group 是聚合管道中的一个阶段&#xff0c;用于根据指定的条件对文档进行分组。 {$group: {_id: <expression>, // 分组的依据…

Dubbo 黑白名单机制详解

在微服务架构中&#xff0c;服务间的安全和流量控制是非常重要的。在众多 Java 微服务框架中&#xff0c;Apache Dubbo 作为一款高性能的 RPC 框架&#xff0c;提供了丰富的功能来管理服务调用。在 Dubbo 中&#xff0c;黑白名单机制是保障服务安全性和可控性的一个重要手段。本…

Vue el-input 中 readonly和disabled的区别详解

在 Vue.js 的 Element UI 组件库中&#xff0c;el-input 是一个常用的输入框组件。readonly 和 disabled 是两个常见的属性&#xff0c;用于控制输入框的交互行为&#xff0c;但它们之间存在显著的差异。下面将详细解释这两个属性的区别。 readonly 定义&#xff1a;readonly…

USB描述符实例和介绍

具体的描述符每个字节的含义可参考USB2.0协议 一个标注的描述符集合 /*********************************/ 设备描述符[18]{0x12, //固定 bLength字段。设备描述符的长度为18(0x12)字节0x01, //固定 bDescriptorType字段。设备描述符的编号为0x010x10,0x01, //bcdUSB字…

uniapp中@click或者@tap多层嵌套的问题解决方法

我们在开发页面的过程中。例如要设计一个九宫格的相册&#xff0c;并且加上删除上传图片和点击图片后预览图片大图的功能例如下图的演示功能。 点击图片后显示大图预览图片&#xff0c;点击x号后要删除掉当前的图片&#xff0c;那么我们设计的时候如果我们代码写成如下的格式 …

【C语言】栈的实现(数据结构)

前言&#xff1a; 还是举一个生活中的例子&#xff0c;大家都玩过积木&#xff0c;当我们把积木叠起来的时候&#xff0c;如果要拿到最底部的积木&#xff0c;我们必须从顶端一个一个打出&#xff0c;最后才能拿到底部的积木&#xff0c;也就是后进先出&#xff08;先进后出&a…

硬件厂家行业进销存系统开发之门票预约,源码解析css样式

采用技术未来之窗web行业应用弹窗对话框artDialog 未来之窗web行业应用弹窗对话框artDialog: 网页弹窗&#xff0c;独立使用单文件版本&#xff0c;可指定位置&#xff0c;左上&#xff0c;左下&#xff0c;中间&#xff0c;右侧&#xff0c;下册&#xff0c;左侧&#xff0c;…

微信小程序结合后端php发送模版消息

前端&#xff1a; <view class"container"><button bindtap"requestSubscribeMessage">订阅消息</button> </view> // index.js Page({data: {tmplIds: [UTgCUfsjHVESf5FjOzls0I9i_FVS1N620G2VQCg1LZ0] // 使用你的模板ID},requ…

vue+canvas音频可视化

1.代码 <template><div class"subGuide"><canvas id"canvas"></canvas><br><audio id"audio" src"./audio.mp3" controls></audio></div> </template><script> export…

48、PHP 实现冒泡排序法

题目&#xff1a; PHP 实现冒泡排序法 描述&#xff1a; /** 第1趟&#xff1a;3, 6, …2, 6, 3, …2, 6, 3, 4, …2, 6, 3, 4, 10, …1, 6, 3, 4, 10, 2, …1, 6, 3, 4, 10, 2, 9, …1, 6, 3, 4, 10, 2, 9, 8, …1, 6, 3, 4, 10, 2, 9, 8, 5, …1, 6, 3, 4, 10, 2, 9, 8, 5…

音乐曲谱软件Guitar Pro 8.2 for Mac 中文破解版

Guitar Pro 8.2 for Mac 中文破解版是一款功能强大的音乐曲谱软件&#xff0c;非常适合学习如何玩&#xff0c;改进技巧&#xff0c;重现喜爱的歌曲或陪伴自己。 Guitar Pro for Mac 是一款功能强大的音乐曲谱软件&#xff0c;非常适合学习如何玩&#xff0c;改进技巧&#xf…

做一个能和你互动玩耍的智能机器人之一

2024年被很多人称为AI元年&#xff0c;其实AI元年的叫法由来以久&#xff0c;近年来每一次AI技术的进步&#xff0c;都有很多圈内人大呼AI元年&#xff0c;但不仅一直风声不大&#xff0c;雨点也偏小&#xff0c;都是小范围交流。 得益于软硬件的进步&#xff0c;AI今年开始侵…

深度学习系列70:模型部署torchserve

1. 流程说明 ts文件夹下&#xff0c; 从launcher.py进入&#xff0c;执行jar文件。 入口为model_server.py的start()函数。内容包含&#xff1a; 读取args&#xff0c;创建pid文件 找到java&#xff0c;启动model-server.jar程序&#xff0c;同时读取log-config文件&#xff…

数据库表结构创建

一、原型图 二、分析 1、天气&#xff0c;值字段只有实测值&#xff0c;可用一个字段表示&#xff08;单位、来源同上&#xff09; 2、气温有默认值与实测值两个选项&#xff0c;一个字段无法表示默认值与实测值&#xff08;单位&#xff0c;来源同上&#xff09; 3、因为有…

【Kettle实现神通(数据库)MPP增量、全量数据ETL,同步任务Linux运行(通用)】

1、背景介绍 具体Kettle操作步骤不做过多介绍&#xff0c;主要技术方案说明&#xff0c;Kettle8.2版本放在底部链接提取&#xff0c;本次采用Kettle实现源端&#xff1a;神通数据通用库、目标端&#xff1a;神通MPP增量数据同步&#xff0c;并在服务器端运行Job。 2、windows…

【AIGC】构建自己的谷歌搜索引擎服务并使用

一、谷歌 谷歌的搜索引擎需要自己创建服务才能启用检索api。&#xff08;需自行翻墙和创建自己的谷歌账号&#xff09; 1.1 API服务创建 1&#xff09;登陆https://console.cloud.google.com/: 2&#xff09; 选择新建项目&#xff0c;取号项目名即可&#xff08;比如:Olin…