Python3 xml.etree.ElementTree支持的XPath语法详解


Posted in Python onMarch 06, 2020

xml.etree.ElementTree可以通过支持的有限的XPath表达式来定位元素。

语法

ElementTree支持的语法如下:

语法 说明
tag 查找所有具有指定名称tag的子元素。例如:country表示所有名为country的元素,country/rank表示所有名为country的元素下名为rank的元素。
* 查找所有元素。如:*/rank表示所有名为rank的孙子元素。
. 选择当前元素。在xpath表达式开头使用,表示相对路径。
// 选择当前元素下所有级别的所有子元素。xpath不能以“//”开头。
.. 选择父元素。如果视图达到起始元素的祖先,则返回None(或空列表)。起始元素为调用find(或findall)的元素。
[@attrib] 选择具有指定属性attrib的所有子元素。
[@attrib='value'] 选择指定属性attrib具有指定值value的元素,该值不能包含引号。
[tag] 选择所有具有名为tag的子元素的元素。
[.='text'] Python3.7+,选择元素(或其子元素)完整文本内容为指定的值text的元素。
[tag='text'] 选择元素(或其子元素)名为tag,完整文本内容为指定的值text的元素。
[position] 选择位于给定位置的所有元素,position可以是以1为起始的整数、表达式last()或相对于最后一个位置的位置(如:last()-1)

方括号表达式前面必须有标签名、星号或者其他方括号表达式。position前必须有一个标签名。

简单示例

#!/usr/bin/python
# -*- coding:utf-8 -*-
import os
import xml.etree.cElementTree as ET
xml_string="""<?xml version="1.0"?>
<data>
  <country name="Liechtenstein">
    <rank updated="yes">2</rank>
    <year>2008</year>
    <gdppc>141100</gdppc>
    <neighbor name="Austria" direction="E"/>
    <neighbor name="Switzerland" direction="W"/>
  </country>
  <country name="Singapore">
    <rank updated="yes">5</rank>
    <year>2011</year>
    <gdppc>59900</gdppc>
    <neighbor name="Malaysia" direction="N"/>
  </country>
  <country name="Panama">
    <rank updated="yes">69</rank>
    <year>2011</year>
    <gdppc>2011</gdppc>
    <neighbor name="Costa Rica" direction="W"/>
    <neighbor name="Colombia" direction="E"/>
  </country>
	<country name="Washington">
    <rank updated="yes">55</rank>
    <gdppc>13600</gdppc>
  </country>
</data>
"""
root=ET.fromstring(xml_string)
#查找data下所有名为country的元素
for country in root.findall("country"):
	print("name:"+country.get("name"))
	#查找country下所有名为year的元素
	year=country.find("./year")
	if year:
		print("year:"+year.text)
#查找名为neighbor的孙子元素
for neighbor in root.findall("*/neighbor"):
	print("neighbor:"+neighbor.get("name"))
#查找country下的所有子元素
for ele in root.findall("country//"):
	print(ele.tag)
#查找当前元素的父元素,结果为空
print(root.findall(".."))
#查找与名为rank的孙子元素同级的名为gdppc的元素
for gdppc in root.findall("*/rank/../gdppc"):
	print("gdppc:"+gdppc.text)
#查找data下所有具有name属性的子元素
for country in root.findall("*[@name]"):
	print(country.get("name"))
#查找neighbor下所有具有name属性的子元素
for neighbor in root.findall("country/*[@name]"):
	print(neighbor.get("name"))
#查找country下name属性值为Malaysia的子元素
print("direction:"+root.find("country/*[@name='Malaysia']").get("direction"))
#查找root下所有包含名为year的子元素的元素
for country in root.findall("*[year]"):
	print("name:"+country.get("name"))
#查找元素(或其子元素)文本内容为2011的元素(Python3.7+)
#print(len(root.findall("*[.='2011']")))
#查找元素(或其子元素)名为gdppc,文本内容为2011的元素
for ele in root.findall("*[gdppc='2011']"):
	print(ele.get("name"))
#查找第二个country元素
print(root.find("country[2]").get("name"))

补充知识:python lxml etree xpath定位

etree全称:ElementTree 元素树

用法:

import requests
from lxml import etree
response = requests.get('html')
res = etree.HTML(response.text)   #利用 etree.HTML 初始化网页内容
resp = res.xpath('//span[@class="green"]/text()')

以上这篇Python3 xml.etree.ElementTree支持的XPath语法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python中使用dict和set方法的教程
Apr 27 Python
python嵌套字典比较值与取值的实现示例
Nov 03 Python
Python迭代器和生成器定义与用法示例
Feb 10 Python
Python2.7.10以上pip更新及其他包的安装教程
Jun 12 Python
基于Python List的赋值方法
Jun 23 Python
Pycharm连接远程服务器并实现远程调试的实现
Aug 02 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
Dec 04 Python
django formset实现数据表的批量操作的示例代码
Dec 06 Python
Django 解决新建表删除后无法重新创建等问题
May 21 Python
python判断是空的实例分享
Jul 06 Python
如何让PyQt5中QWebEngineView与JavaScript交互
Oct 21 Python
Python页面加载的等待方式总结
Feb 28 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
Mar 06 #Python
Python yield的用法实例分析
Mar 06 #Python
用Python生成HTML表格的方法示例
Mar 06 #Python
使用Python第三方库pygame写个贪吃蛇小游戏
Mar 06 #Python
Python修改列表值问题解决方案
Mar 06 #Python
浅谈matplotlib.pyplot与axes的关系
Mar 06 #Python
python-xpath获取html文档的部分内容
Mar 06 #Python
You might like
PHP MySQL应用中使用XOR运算加密算法分享
2011/08/28 PHP
深入Nginx + PHP 缓存详解
2013/07/11 PHP
php时区转换转换函数
2014/01/07 PHP
Aster vs Newbee BO5 第三场2.19
2021/03/10 DOTA
javascript xml为数据源的下拉框控件
2009/07/07 Javascript
使用javascipt---实现二分查找法
2013/04/10 Javascript
js判断鼠标同时离开两个div的思路及代码
2013/05/31 Javascript
在javascript中实现函数数组的方法
2013/12/25 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
用Jquery.load载入页面后样式没了页面混乱的解决方法
2014/10/20 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
原生JavaScript编写canvas版的连连看游戏
2016/05/29 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
2016/10/09 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
浅谈对于react-thunk中间件的简单理解
2019/05/01 Javascript
小程序实现图片移动缩放效果
2020/05/26 Javascript
Python文件处理
2016/02/29 Python
python实现多人聊天室
2020/03/31 Python
详解小白之KMP算法及python实现
2019/04/04 Python
Django 外键的使用方法详解
2019/07/19 Python
python路径的写法及目录的获取方式
2019/12/26 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
2020/04/23 Python
Python自动化测试基础必备知识点总结
2021/02/07 Python
瑞典最大的儿童用品网上商店:pinkorblue.se
2021/03/09 全球购物
估算杭州有多少软件工程师
2015/08/11 面试题
大学旷课检讨书
2014/01/28 职场文书
高等教育学自荐书范文
2014/02/10 职场文书
物流专员岗位职责
2014/02/17 职场文书
学校安全责任书
2014/04/14 职场文书
民主评议党员自我评议范文2014
2014/09/26 职场文书
实习单位意见
2015/06/04 职场文书
Ruby序列化和持久化存储 Marshal和Pstore介绍
2022/04/18 Ruby
Redis实现分布式锁的五种方法详解
2022/06/14 Redis