Python3 xml.etree.ElementTree支持的XPath语法详解
作者:_荣耀之路_ 发布时间:2021-08-06 07:29:44
标签:Python3,xml.etree.ElementTree,XPath
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()')
来源:https://blog.csdn.net/asty9000/article/details/93598481
0
投稿
猜你喜欢
- 1、下载mysql-python官网地址:http://sourceforge.net/projects/mysql-python/2、安装
- 本文实例讲述了python函数形参用法。分享给大家供大家参考。具体如下:函数形参:函数取得的参数是你提供给函数的值,这样函数就可以利用这些值
- 1069错误(由于登录失败而无法启动服务)解决方法在本版面出现这个问题的频率也算是很高的了,新手通常会比较多遇到这个问题原因很简单,安装SQ
- 一.文件基本操作1.1 文件打开和关闭open(‘文件名称','打开模式')模式:r(只读,指针再头) w(只写,存
- 在第一章,我们讲过position,当它取值absolute的时候,即绝对定位。既然是定位,就要有参照物。一般来讲,这个定位的参照物是bod
- 核心提示:本文针对mysql-noinstall版本,也就是解压缩版的安装配置应用做了个总结,这些操作都是平时很常用的操作。文章中不对mys
- 一段重用很高的ajax代码,可以套用 <!DOCTYPE HTML
- 本文较为详细的分析了php单一入口应用程序。分享给大家供大家参考。具体如下:什么是单一入口应用程序?在解释什么是单一入口应用程序之前,我们先
- 前两天学习了一下socket编程,在向某大神请教问题时被嫌弃了,有一种还没学会走就想跑的感觉。大神说我现在的水平应该去做一些像是操作文件、序
- 代码如下: <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%&
- 脚本运行环境python 3.6+edge浏览器(推荐使用,因为在edge浏览器中可以获得额外12分,当然chrome浏览器也可以)webd
- 使用matplotlib.tri.CubicTriInterpolator.演示变化率计算:完整实例:from matplotlib.tri
- 函数原型:getopt.getopt(args, shortopts, longopts=[])参数解释:  
- 微博如火如荼,大家都选择用微博带来社会化流量,顺便推广产品和网站,几乎所有的网站都有分享到代码,但是还有一种更快捷的分享方式,javascr
- 负责Web编写的前端人员,都清楚可以通过W3验证服务功能,来在线验证自己编写的XHTML代码是否正确,在验证期间,最容易出现的错误往往都是在
- 【译者的话】我们曾经在《透视色轮》一文中探讨过色轮的构成及作用,但你可能更多的只是将其作为了解颜色关系的一个工具,却不一定将其作为实际设计中
- 最近无意看到网上有人使用Python编写几十行代码生成图像验证码,感觉很是繁琐,这里为各位朋友推荐两种方法,使用4行Python代码即可生成
- var obj=document.getElementById("id");得到的是dom对象,对该对象进行操作的时候使
- 1.多态是指传入不同的对象,产生不同的结果多态指的是一类事物有多种形态(一个抽象类有多个子类,因而多态的概念依赖于继承)定义:多态是一种使用
- 做图像识别的时候需要在图片中画出特定大小和角度的矩形框,自己写了一个函数,给定的输入是图片名称,矩形框的位置坐标,长宽和角度,直接输出画好矩