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 + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
Jul 14 Python
Django的session中对于用户验证的支持
Jul 23 Python
Python中模块string.py详解
Mar 12 Python
python使用pycharm环境调用opencv库
Feb 11 Python
PyQtGraph在pyqt中的应用及安装过程
Aug 04 Python
ipad上运行python的方法步骤
Oct 12 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
Feb 26 Python
pandas 强制类型转换 df.astype实例
Apr 09 Python
解决python打开https出现certificate verify failed的问题
Sep 03 Python
用python-webdriver实现自动填表的示例代码
Jan 13 Python
Pytest实现setup和teardown的详细使用详解
Apr 17 Python
C3 线性化算法与 MRO之Python中的多继承
Oct 05 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 OPCode缓存 APC详细介绍
2010/10/12 PHP
php+mysql实现无限分类实例详解
2015/01/15 PHP
实例讲解PHP设计模式编程中的简单工厂模式
2016/02/29 PHP
php中bind_param()函数用法分析
2017/03/28 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
2017/10/13 PHP
IE和Firefox下javascript的兼容写法小结
2008/12/10 Javascript
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
JavaScript创建类/对象的几种方式概述及实例
2013/05/06 Javascript
文本域中换行符的替换示例
2014/03/04 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
2014/07/21 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
jQuery实现web页面樱花坠落的特效
2017/06/01 jQuery
js 两个日期比较相差多少天的实例
2017/10/19 Javascript
微信小程序实现两边小中间大的轮播效果的示例代码
2018/12/07 Javascript
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
2019/11/25 Javascript
JavaScript实现英语单词题库
2019/12/24 Javascript
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
[54:30]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
python中查看变量内存地址的方法
2015/05/05 Python
Python中的自省(反射)详解
2015/06/02 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
python实现密码强度校验
2020/03/18 Python
Guess荷兰官网:美国服饰品牌
2020/01/22 全球购物
如何保障Web服务器安全
2014/05/05 面试题
机关党员进社区活动总结
2014/07/05 职场文书
网吧七夕活动策划方案
2014/08/31 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
干部培训简讯
2015/07/20 职场文书
预备党员的思想汇报,你真的会写吗?
2019/06/28 职场文书
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电
vue-cli3.x配置全局的scss的时候报错问题及解决
2022/04/30 Vue.js
Java中Dijkstra(迪杰斯特拉)算法
2022/05/20 Java/Android