ElementPath
ElementTree库附带了一个简单的类似XPath的路径语言ElementPath
主要区别在于,可以在ElementPath表达式中使用{namespace}标记符号
但是,诸如值比较和函数之类的高级功能不可用
只要树没有被修改,这个路径表达式就表示一个给定元素的标识符,以后可以用它在同一棵树中找到它
与XPath相比,ElementPath表达式具有自包含的优势,即使对于使用名称空间的文档也是如此
除了完整的XPath实现之外,lxml.etree支持ElementPath语言的方式与ElementTree相同
甚至使用(几乎)相同的实现。API在这里提供了四种方法,可以在Elements和ElementTrees上找到它们
iterfind(): 遍历与路径表达式匹配的所有元素
findall(): 返回匹配元素的列表
find(): 只有效地返回第一个匹配项
findtext(): 返回第一个匹配项的.text内容
# coding:utf-8
from lxml import etree #查找当前节点的子节点
root = etree.XML("<root><a x='123'>aText<b/><c/><b/></a></root>")
print(root.find("b")) #输出:None,因为root的子节点是a
print(root.find("a").tag) #输出:a #查找树中的任意节点
print(root.find(".//b").tag) #输出:b
print([ b.tag for b in root.iterfind(".//b")]) #输出:['b', 'b'] #查找带指定属性的节点
print(root.findall(".//a[@x]")[0].tag) #输出:a
print(root.findall(".//a[@y]")) #输出:[] #在lxml 3.4中,有一个新的功能为元素生成一个结构化的ElementPath表达式
tree = etree.ElementTree(root)
a = root[0]
print(tree.getelementpath(a[0])) #输出:a/b[1]
print(tree.getelementpath(a[1])) #输出:a/c
print(tree.getelementpath(a[2])) #输出:a/b[2]
print(tree.find(tree.getelementpath(a[2])) == a[2]) #输出:True #.iter()方法是一种特殊情况,它只根据名称在树中查找特定标记,而不是基于路径
#这意味着以下命令在成功案例中是等价的
print(root.find(".//b").tag) #输出:b
print(next(root.iterfind(".//b")).tag) #输出:b
print(next(root.iter("b")).tag) #输出:b #注意,如果没有找到匹配项,.find()方法只返回None,而其他两个示例将引发StopIteration异常
ElementPath的更多相关文章
- 记使用aliyun-log-logback-appender 报错no applicable action for [encoder], current ElementPath is [[configuration][appender][encoder]]
依赖: <dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>aliy ...
- no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]
今天down了一个开源项目,启动后一直存在如下错误信息: ERROR in ch.qos.logback.core.joran.spi.Interpreter@26:42 - no applicabl ...
- 【异常】ERROR in ch.qos.logback.core.joran.spi.Interpreter@159:22 - no applicable action for [charset], current ElementPath is [[configuration][appender][encoder][charset]]
一.异常信息 Exception in thread "restartedMain" java.lang.reflect.InvocationTargetException at ...
- Logback报错 no applicable action for [Encoding], current ElementPath is [[configuration][appender][Encoding]]
老版本是0.9,移到springboot项目,解决办法,删除xml配置文件节点<Encoding>UTF-8</Encoding>
- Python(五)模块
本章内容: 模块介绍 time & datetime random os sys json & picle hashlib XML requests ConfigParser logg ...
- python模块(shelve,xml,configparser,hashlib,logging)
1.1shelve模块 shelve 模块比pickle模块简单,只有一个open函数,返回类似字典对象,可读可写:key必须为字符串, 而值可以是python所支持的数据类型. shelve模块主要 ...
- java分享第十七天-01(封装操作xml类)
做自动化测试的人,都应该对XPATH很熟悉了,但是在用JAVA解析XML时,我们通常是一层层的遍历进去,这样的代码的局限性很大,也不方便,于是我们结合一下XPATH,来解决这个问题.所需要的JAR包: ...
- java 解析并生成 XML
在 java 中使用 Dom4j 解析 XML 对 XML 文件的解析,通常使用的是 Dom4j 和 jdom 作为XML解析工具. 在此只介绍下 Dom4j 对 XML 文件的解析使用方法. 1. ...
- 【开源】SoDiaoEditor 可能是目前最好用的开源电子病历编辑器(B/S架构)
此刻我的内心是忐忑的,这个标题给了我很大的压力,虽然很久以前我就在github上搜索一圈了,也没发现有其他更好的开源电子病历编辑器,如各位亲发现有更好的,烦请知会我一声. 该编辑器其实已经憋了很久了, ...
随机推荐
- vue click.stop阻止点击事件继续传播
<div id="app"> <div @click="dodo"> <button @:click="doThis&q ...
- JSP请求是如何被处理的?jsp的执行原理
客户端通过浏览器发送jsp请求,服务器端接受到请求后,判断是否是第一次请求该页面,或者该页面是否改变,若是,服务器将jsp页面翻译为servlet,jvm将servlet编译为.class文件,字节码 ...
- IUSEP研修报告
目录 Introduction Alberta - Edmonton University of Alberta IUSEP Schoolwork and Project Principle of F ...
- 用Python抢到回家的车票,so easy!
“ 盼望着,盼望着,春节的脚步近了,然而,每年到这个时候,最难的,莫过于一张回家的火车票. 据悉,今年春运期间,全国铁路发送旅客人次同比将增长 8.0%.达到 4.4 亿人次. 2020 年铁 ...
- C#8.0中新特性之一:结构readonly成员
结构struct成员支持readonly,用来限制被其修饰的成员不会改变结构的内部状态.加上7.2版本添加的readonly struct和ref readonly方法返回以及之前的字段声明修饰作用, ...
- 达梦7入门技术总结--DCA级别
说明: 1)该实验所有过程均是本人亲自敲命令完成,所有代码运行正确 2)安装过程使用的是suse11 sp3操作系统,后续的实验过程换成了麒麟中标,因此部分路径可能存在差异 3)安装过程使用了命令行安 ...
- sqlserver日志处理不当而造成的隐患
sqlserver日志处理不当而造成的隐患 事故背景:一大早还在路上,群里陆续有人反馈系统一直报错 “Unknown error 258”,后来查询日志发现错误日志 第一反应是不是数据库连接不够用了? ...
- docker容器和虚拟机的比较
containers:容器是在应用层的抽象化,多个容器能够运行在同一台机器上,和其他容器共享操作系统的核,每个容器运行都独立的运行在用户的空间内.容器需要的空间比虚拟机要小(容器镜像的大小一般为MBs ...
- ps -ef |grep -v 在shell sh 脚本中貌似无效?
想通过ps -ef |grep erdp_ |awk '{print $2}' 获取 erdp_ 开头的进程id, 执行在终端环境下执行是ok的,但是在 sh 脚本里面竟然多出了 两个 root 11 ...
- ELK:ElasticSearch中有数据,Kibana查询不到数据
ElasticSearch中有数据,Kibana查询不到数据 多数原因就是Linux的时区问题, 在linux输入date查看当前时间是否根本地相对应,不对应那么你就来对了, 解决方案一. 这个选择的 ...