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的更多相关文章

  1. 记使用aliyun-log-logback-appender 报错no applicable action for [encoder], current ElementPath is [[configuration][appender][encoder]]

    依赖: <dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>aliy ...

  2. no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]

    今天down了一个开源项目,启动后一直存在如下错误信息: ERROR in ch.qos.logback.core.joran.spi.Interpreter@26:42 - no applicabl ...

  3. 【异常】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 ...

  4. Logback报错 no applicable action for [Encoding], current ElementPath is [[configuration][appender][Encoding]]

    老版本是0.9,移到springboot项目,解决办法,删除xml配置文件节点<Encoding>UTF-8</Encoding>

  5. Python(五)模块

    本章内容: 模块介绍 time & datetime random os sys json & picle hashlib XML requests ConfigParser logg ...

  6. python模块(shelve,xml,configparser,hashlib,logging)

    1.1shelve模块 shelve 模块比pickle模块简单,只有一个open函数,返回类似字典对象,可读可写:key必须为字符串, 而值可以是python所支持的数据类型. shelve模块主要 ...

  7. java分享第十七天-01(封装操作xml类)

    做自动化测试的人,都应该对XPATH很熟悉了,但是在用JAVA解析XML时,我们通常是一层层的遍历进去,这样的代码的局限性很大,也不方便,于是我们结合一下XPATH,来解决这个问题.所需要的JAR包: ...

  8. java 解析并生成 XML

    在 java 中使用 Dom4j 解析 XML 对 XML 文件的解析,通常使用的是 Dom4j 和 jdom 作为XML解析工具. 在此只介绍下 Dom4j 对 XML 文件的解析使用方法. 1. ...

  9. 【开源】SoDiaoEditor 可能是目前最好用的开源电子病历编辑器(B/S架构)

    此刻我的内心是忐忑的,这个标题给了我很大的压力,虽然很久以前我就在github上搜索一圈了,也没发现有其他更好的开源电子病历编辑器,如各位亲发现有更好的,烦请知会我一声. 该编辑器其实已经憋了很久了, ...

随机推荐

  1. 【hibernate】存储图片

    [hibernate]存储图片 转载: package cn.ycx.study.hibernate.entity; import javax.persistence.Entity; import j ...

  2. 5G 调制与解调

    调制,就是将原始信号转换为适合在信道中传输的形式的一种过程,在无线通信中,调制一般均指载波调制,而解调则是调制的逆过程,即将原始信号从已调信号中恢复出来. 进行载波调制,主要为实现以下目标: 1)在无 ...

  3. django基础之day10,cookie session token

    https://www.cnblogs.com/Dominic-Ji/p/10886902.html cookie session token

  4. 《Dotnet9》建站-记录建站过程中使用的一些网址

    时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...

  5. AOP框架Dora.Interception 3.0 [5]: 基于策略的拦截器注册方式

    注册拦截器旨在解决如何将拦截器应用到目标方法的问题.在我看来,针对拦截器的注册应该是明确而精准的,也就是我们提供的注册方式应该让拦截器准确地应用到期望的目标方法上,不能多也不能少.如果注册的方式过于模 ...

  6. 爬虫(九):python操作MySQL、MongoDB

    1. python操作MySQL 1.1 MySQL基础 在java基础部分就写过了. https://www.cnblogs.com/liuhui0308/p/11891844.html 1.2 p ...

  7. MySQL Event历史记录

    需求 SQL Server的作业历史(Job)记录是保存在msdb库中的,很方便就查询相关的Job定义,计划和历史记录,而MySQL的event却没有历史记录.为方便查看event是否正常执行以及执行 ...

  8. Python 之列表切片的四大常用操作

    最近在爬一个网站的文档的时候,老师要求把一段文字切割开来,根据中间的文本分成两段 故学习了一段时间的切片操作,现把学习成果po上来与大家分享 1.何为切片? 列表的切片就是处理列表中的部分元素,是把整 ...

  9. 一起学SpringMVC之文件上传

    概述 在Web系统开发过程中,文件上传是普遍的功能,本文主要以一个简单的小例子,讲解SpringMVC中文件上传的使用方法,仅供学习分享使用,如有不足之处,还请指正. 文件上传依赖包 如下所示,文件上 ...

  10. HTML入门(html基本文本标签+快捷键讲解以及基本html组成解释)

    id 标签 功能  1  <hr /> 水平分割线  2 <br /> 强制让文本换行  3 <p>段落</p> 段落标签(自带换行效果)  4 < ...