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 相关文章推荐
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
Nov 27 Python
Python 时间操作例子和时间格式化参数小结
Apr 24 Python
利用Python抓取行政区划码的方法
Nov 28 Python
python opencv实现运动检测
Jul 10 Python
python判断一个数是否能被另一个整数整除的实例
Dec 12 Python
利用python实现在微信群刷屏的方法
Feb 21 Python
浅谈PYTHON 关于文件的操作
Mar 19 Python
python中with用法讲解
Feb 07 Python
python中JWT用户认证的实现
May 18 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
Jan 12 Python
PyQt5 QThread倒计时功能的实现代码
Apr 02 Python
微信小程序调用python模型
Apr 21 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
一个取得文件扩展名的函数
2006/10/09 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
js下用eval生成JSON对象
2010/09/17 Javascript
使用js 设置url参数
2013/07/08 Javascript
Javascript倒计时页面跳转实例小结
2013/09/11 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
Jquery uploadify上传插件使用详解
2016/01/13 Javascript
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
前端jquery部分很精彩
2016/05/03 Javascript
利用vue-router实现二级菜单内容转换
2016/11/30 Javascript
AngularJS实现给动态生成的元素绑定事件的方法
2016/12/14 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
2017/01/03 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
2017/08/04 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
通过图带你深入了解vue的响应式原理
2019/06/21 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
2020/01/17 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
Python中用于检查英文字母大写的isupper()方法
2015/05/19 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
python绘制简单彩虹图
2018/11/19 Python
face++与python实现人脸识别签到(考勤)功能
2019/08/28 Python
python实现猜数字游戏
2020/03/25 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
python 实现从高分辨图像上抠取图像块
2020/01/02 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
Python类的动态绑定实现原理
2020/03/21 Python
Python用Jira库来操作Jira
2020/12/28 Python
html5 canvas 使用示例
2010/10/22 HTML / CSS
凯撒娱乐:Caesars Entertainment
2018/02/23 全球购物
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
人力资源部经理助理岗位职责
2014/03/04 职场文书
公司年会搞笑主持词
2014/03/24 职场文书
心理咨询承诺书
2014/05/20 职场文书
2014年电话销售工作总结
2014/12/01 职场文书
学生检讨书怎么写
2015/05/07 职场文书