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实现的数据结构与算法之基本搜索详解
Apr 22 Python
Django使用httpresponse返回用户头像实例代码
Jan 26 Python
python爬虫实例详解
Jun 19 Python
基于数据归一化以及Python实现方式
Jul 11 Python
Face++ API实现手势识别系统设计
Nov 21 Python
Python实现字符串匹配的KMP算法
Apr 04 Python
详解python实现小波变换的一个简单例子
Jul 18 Python
python识别文字(基于tesseract)代码实例
Aug 24 Python
Python3如何在Windows和Linux上打包
Feb 25 Python
python爬虫实现获取下一页代码
Mar 13 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
Mar 30 Python
python实现自动清理重复文件
Aug 24 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
让这部DC动画新作刷新你的认知
2020/03/03 欧美动漫
人脸识别测颜值、测脸龄、测相似度微信接口
2016/04/07 PHP
PHP设计模式之装饰器模式定义与用法详解
2018/04/02 PHP
JavaScript 原型与继承说明
2010/06/09 Javascript
Jquery replace 字符替换实现代码
2010/12/02 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
2013/06/06 Javascript
Jquery操作radio的简单实例
2014/01/06 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
JQuery的ON()方法支持的所有事件罗列
2015/02/28 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
使用vue实现点击按钮滑出面板的实现代码
2017/01/10 Javascript
浅谈键盘上回车按钮的js触发事件
2017/02/13 Javascript
Angular4表单验证代码详解
2017/09/03 Javascript
js截取字符串功能的实现方法
2017/09/27 Javascript
html5以及jQuery实现本地图片上传前的预览代码实例讲解
2021/03/01 jQuery
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
Python 的 Socket 编程
2015/03/24 Python
python爬取51job中hr的邮箱
2016/05/14 Python
Django在pycharm下修改默认启动端口的方法
2019/07/26 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
python爬虫容易学吗
2020/06/02 Python
Python中有几个关键字
2020/06/04 Python
浅析HTML5:'data-'属性的作用
2018/01/23 HTML / CSS
Expedia印度:您的一站式在线旅游网站
2017/08/24 全球购物
贝玲妃英国官网:Benefit英国
2018/02/03 全球购物
德国帽子专家:Hutshopping
2019/11/03 全球购物
大四学生思想汇报
2014/01/13 职场文书
公立医院改革实施方案
2014/03/14 职场文书
单位工作证明范文
2014/09/14 职场文书
2014年光棍节活动策划方案(创意集锦)
2014/09/29 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
2019客服个人年终工作总结范文
2019/07/08 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
如何使用PyCharm及常用配置详解
2021/06/03 Python
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL