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 BeautifulSoup中文乱码问题的2种解决方法
Apr 22 Python
Python中死锁的形成示例及死锁情况的防止
Jun 14 Python
Python pyinotify日志监控系统处理日志的方法
Mar 08 Python
python requests 测试代理ip是否生效
Jul 25 Python
python中for循环输出列表索引与对应的值方法
Nov 07 Python
python简易实现任意位数的水仙花实例
Nov 13 Python
opencv与numpy的图像基本操作
Mar 08 Python
Python 一键制作微信好友图片墙的方法
May 16 Python
Anaconda 查看、创建、管理和使用python环境的方法
Dec 03 Python
python使用正则来处理各种匹配问题
Dec 22 Python
关于Python字符串显示u...的解决方式
Mar 06 Python
基于Keras的格式化输出Loss实现方式
Jun 17 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中usort在值相同时改变原始位置问题的解决方法
2011/11/27 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
2016/11/17 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
新浪刚打开页面出来的全屏广告代码
2007/04/02 Javascript
jQuery中unbind()方法用法实例
2015/01/19 Javascript
JS实现网页顶部向下滑出的全国城市切换导航效果
2015/08/22 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
高效Web开发的10个jQuery代码片段
2016/07/22 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
AngularJS变量及过滤器Filter用法分析
2016/11/22 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
2016/11/24 Javascript
JS实现太极旋转思路分析
2016/12/09 Javascript
Angular-Touch库用法示例
2016/12/22 Javascript
利用node.js如何搭建一个简易的即时响应服务器
2017/05/28 Javascript
Vue.js组件通信的几种姿势
2017/10/23 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
2018/03/20 Javascript
浅谈vue项目可以从哪些方面进行优化
2018/05/05 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
2018/05/12 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
vue-cli中安装方法(图文详细步骤)
2018/12/12 Javascript
js实现unicode码字符串与utf8字节数据互转详解
2019/03/21 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
Python内置函数之filter map reduce介绍
2014/11/30 Python
Python和Java进行DES加密和解密的实例
2018/01/09 Python
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
python 中字典嵌套列表的方法
2018/07/03 Python
python爬虫之线程池和进程池功能与用法详解
2018/08/02 Python
澳大利亚在线购买儿童玩具:Toy Universe
2017/12/28 全球购物
舞蹈教师自荐信
2014/01/27 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
2014年社区教育工作总结
2014/12/02 职场文书
红领巾广播站广播稿
2015/08/19 职场文书
素质教育培训心得体会
2016/01/19 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书