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统计文本文件内单词数量的方法
May 30 Python
Python cx_freeze打包工具处理问题思路及解决办法
Feb 13 Python
Python scikit-learn 做线性回归的示例代码
Nov 01 Python
python输出决策树图形的例子
Aug 09 Python
Python上下文管理器全实例详解
Nov 12 Python
python中设置超时跳过,超时退出的方式
Dec 13 Python
python 实现读取csv数据,分类求和 再写进 csv
May 18 Python
python中plt.imshow与cv2.imshow显示颜色问题
Jul 16 Python
详解python中的lambda与sorted函数
Sep 04 Python
Python Socket多线程并发原理及实现
Dec 11 Python
Python文件名匹配与文件复制的实现
Dec 11 Python
Pandas搭配lambda组合使用详解
Jan 22 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
PHPlet在Windows下的安装
2006/10/09 PHP
Yii框架获取当前controlle和action对应id的方法
2014/12/03 PHP
PHP封装的HttpClient类用法实例
2015/06/17 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
XP折叠菜单&amp;仿QQ2006菜单
2006/12/16 Javascript
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
Javascript Throttle &amp; Debounce应用介绍
2013/03/19 Javascript
jQuery弹出(alert)select选择的值
2013/04/21 Javascript
jquery中prop()方法和attr()方法的区别浅析
2013/09/06 Javascript
js读取配置文件自写
2014/02/11 Javascript
javascript+canvas制作九宫格小程序
2014/12/28 Javascript
微信小程序 五星评分的实现实例
2017/08/04 Javascript
Django使用多数据库的方法
2017/09/06 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
2018/08/27 Javascript
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
JavaScript中this用法学习笔记
2019/03/17 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
2020/05/15 Javascript
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
python算法学习之桶排序算法实例(分块排序)
2013/12/18 Python
Python 基础知识之字符串处理
2017/01/06 Python
Python实现的弹球小游戏示例
2017/08/01 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
2020/12/28 Python
Python3使用tesserocr识别字母数字验证码的实现
2021/01/29 Python
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
介绍一下Java中的Class类
2015/04/10 面试题
大一学生的职业生涯规划书范文
2014/01/19 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014年扫黄打非工作总结
2014/12/03 职场文书
电力安全学习心得体会
2016/01/18 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server
pytorch finetuning 自己的图片进行训练操作
2021/06/05 Python
MySQL如何快速创建800w条测试数据表
2022/03/17 MySQL