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实现删除文件但保留指定文件
Jun 21 Python
Python中单例模式总结
Feb 20 Python
python八皇后问题的解决方法
Sep 27 Python
使用matplotlib中scatter方法画散点图
Mar 19 Python
python代码实现逻辑回归logistic原理
Aug 07 Python
Python测试模块doctest使用解析
Aug 10 Python
python 使用while写猜年龄小游戏过程解析
Oct 07 Python
python自动化实现登录获取图片验证码功能
Nov 20 Python
python opencv根据颜色进行目标检测的方法示例
Jan 15 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
Feb 12 Python
python3中的logging记录日志实现过程及封装成类的操作
May 12 Python
Python Selenium异常处理的实例分析
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
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
php统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
JavaScript flash复制库类 Zero Clipboard
2011/01/17 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
JS小功能(操作Table--动态添加删除表格及数据)实现代码
2013/11/28 Javascript
checkbox选中与未选中判断示例
2014/08/04 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
js判断出两个字符串最大子串的函数实现方法
2016/11/01 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
浅析Ajax语法
2016/12/05 Javascript
使用nodejs下载风景壁纸
2017/02/05 NodeJs
angularjs之$timeout指令详解
2017/06/13 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
2019/12/13 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
2020/02/28 Javascript
微信小程序实现单个或多个倒计时功能
2020/11/01 Javascript
Python显示进度条的方法
2014/09/20 Python
Python实现删除文件但保留指定文件
2015/06/21 Python
Python多层嵌套list的递归处理方法(推荐)
2016/06/08 Python
利用Python为iOS10生成图标和截屏
2016/09/24 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
Python I/O与进程的详细讲解
2019/03/08 Python
python-django中的APPEND_SLASH实现方法
2019/06/21 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
python,Java,JavaScript实现indexOf
2020/09/09 Python
selenium+headless chrome爬虫的实现示例
2021/01/08 Python
基于HTML5的齿轮动画特效
2016/02/29 HTML / CSS
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
SQL Server面试题
2016/10/17 面试题
村委会贫困证明范本
2014/09/17 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
2014年维修工作总结
2014/11/22 职场文书
仓库统计员岗位职责
2015/04/14 职场文书
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
2021/06/11 Python