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 相关文章推荐
基于scrapy实现的简单蜘蛛采集程序
Apr 17 Python
Python自动扫雷实现方法
Jul 25 Python
Python中字典的setdefault()方法教程
Feb 07 Python
Python类的继承和多态代码详解
Dec 27 Python
Python运维开发之psutil库的使用详解
Oct 18 Python
Python实现socket非阻塞通讯功能示例
Nov 06 Python
Tensorflow实现部分参数梯度更新操作
Jan 23 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
Feb 17 Python
python实现FTP循环上传文件
Mar 20 Python
keras用auc做metrics以及早停实例
Jul 02 Python
如何利用Python动态模拟太阳系运转
Sep 04 Python
5行Python代码实现一键批量扣图
Jun 29 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 base64+gzinflate压缩编码和解码代码
2008/10/03 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
PHP实现微信退款的方法示例
2019/03/26 PHP
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
jQuery Validation PlugIn的使用方法详解
2015/12/18 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
canvas实现十二星座星空图
2017/02/14 Javascript
解决Vue2.x父组件与子组件之间的双向绑定问题
2018/03/06 Javascript
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
2018/08/12 Javascript
如何让node运行es6模块文件及其原理详解
2018/12/11 Javascript
微信小程序获取用户openid的实现
2018/12/24 Javascript
vue基础之模板和过滤器用法实例分析
2019/03/12 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
js正则表达式简单校验方法
2021/01/03 Javascript
[00:18]天涯墨客三技能展示
2018/08/25 DOTA
[01:21:36]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python密码错误三次锁定(实例讲解)
2017/11/14 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
python 判断文件还是文件夹的简单实例
2019/06/10 Python
python requests指定出口ip的例子
2019/07/25 Python
pytorch 更改预训练模型网络结构的方法
2019/08/19 Python
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
俄罗斯化妆品和香水网上商店:Iledebeaute
2019/01/03 全球购物
为您搜罗全球潮流時尚品牌:HBX
2019/12/04 全球购物
简单的JAVA编程面试题
2013/03/19 面试题
竞选演讲稿范文
2013/12/28 职场文书
大一学生职业生涯规划
2014/03/11 职场文书
黄金搭档广告词
2014/03/21 职场文书
整改落实自查报告
2014/11/05 职场文书
2015年采购部工作总结
2015/04/23 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书