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之不要红头文件(1)
Sep 28 Python
Django应用程序中如何发送电子邮件详解
Feb 04 Python
Python中第三方库Requests库的高级用法详解
Mar 12 Python
Python判断文件和字符串编码类型的实例
Dec 21 Python
python利用sklearn包编写决策树源代码
Dec 21 Python
对pytorch网络层结构的数组化详解
Dec 08 Python
python实现QQ空间自动点赞功能
Apr 09 Python
Python3常见函数range()用法详解
Dec 30 Python
Jupyter Notebook远程登录及密码设置操作
Apr 10 Python
pandas使用之宽表变窄表的实现
Apr 12 Python
python读取xml文件方法解析
Aug 04 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
Aug 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+mysql写的简单留言本实例代码
2008/07/25 PHP
PHP parse_url 一个好用的函数
2009/10/03 PHP
php foreach 使用&amp;(与运算符)引用赋值要注意的问题
2010/02/16 PHP
PHP获取数组中单列值的方法
2017/06/10 PHP
PHP7新特性
2021/03/09 PHP
用JavaScript调用WebService的示例
2008/04/07 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
使用JavaScript动态设置样式实现代码(2)
2013/01/25 Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
2013/05/23 Javascript
html+js实现动态显示本地时间
2013/09/21 Javascript
使用iframe window的scroll方法控制iframe页面滚动
2014/03/05 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
JS中对数组元素进行增删改移的方法总结
2016/12/15 Javascript
详解js的事件代理(委托)
2016/12/22 Javascript
关于Node.js中Buffer的一些你可能不知道的用法
2017/03/28 Javascript
JS返回顶部实例代码
2020/08/09 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
python基础教程之常用运算符
2014/08/29 Python
ubuntu系统下 python链接mysql数据库的方法
2017/01/09 Python
Python数据结构之单链表详解
2017/09/12 Python
python difflib模块示例讲解
2017/09/13 Python
python OpenCV学习笔记之绘制直方图的方法
2018/02/08 Python
python查看数据类型的方法
2019/10/12 Python
python自动识别文本编码格式代码
2019/12/26 Python
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
SHEIN台湾:购买最新流行女装服饰
2019/05/18 全球购物
外语系毕业生找工作的求职信
2013/11/28 职场文书
大学生毕业的自我评价分享
2014/01/02 职场文书
简历上的自我评价
2014/02/03 职场文书
项目投资建议书
2014/05/16 职场文书
学校百日安全生产活动总结
2014/07/05 职场文书
租房协议书
2014/09/12 职场文书
领导欢迎词范文
2015/01/26 职场文书
高三生物教学反思
2016/02/22 职场文书
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技