区块链技术博客
www.b2bchain.cn

lxml etree在之前找到最接近的元素 – python程序员分享

本文介绍了lxml etree在之前找到最接近的元素 – python程序员分享,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

xml文件的结构如下

<a>     <b>         <d>     </b>      <c attr1="important"/>     <b>         <d>     </b>     <c attr1="so important" />     <b></b> </a> 

我的解析器首先获取所有<d>元素

from lxml import etree xmltree = etree.parse(document) elems = xmltree.xpath('//d') 

现在的任务是:

如果有当前<c>标记,请从最近的<d>标记获取属性。

天真的方法是做类似以下的事情

for el in elems:     it = el.getparent()     while it != None and it.tag != 'c':         prev = it.getprevious()         if prev == None:             it = it.getparent()         else:             it = prev      if it != None:         print el, it.get("attr1") 

但是对我来说,这看起来并不简单-我在文档中缺少什么吗?如何在不实现自己的迭代器的情况下解决此问题?

参考方案

使用preceding axis:

前一个轴指示文档中上下文节点之前的所有节点,但所有祖先,属性和名称空间节点除外。

for el in elems:     try:         print el.xpath("preceding::c[@attr1]")[-1].get("attr1")     except IndexError:         print "No preceding 'c' element." 

演示:

>>> from lxml import etree >>>  >>> data = """ ... <a> ...     <b> ...         <d/> ...     </b> ...  ...     <c attr1="important"/> ...     <b> ...         <d/> ...     </b> ...     <c attr1="so important" /> ...     <b></b> ... </a> ... """ >>> xmltree = etree.fromstring(data) >>> elems = xmltree.xpath('//d') >>>  >>> for el in elems: ...     try: ...         print el.xpath("preceding::c[@attr1]")[-1].get("attr1") ...     except IndexError: ...         print "No preceding 'c' element." ...  No preceding 'c' element. important 

我有以下Python代码编写项目的依赖文件。它可以在Python 2.x上正常工作,但是在使用Python 3进行测试时会报告错误。depend = None if not nmake: depend = open(".depend", "a") dependmak = open(".depend.mak&#…

我正在尝试创建一个脚本,该脚本循环创建一个xml文件,并为两个元素增加值。 (使用netaddr的IP地址,以及递增的tag / member元素,tag01-tag10)from netaddr import IPNetwork import xml.dom.minidom import lxml.etree as etree import xml.etr…

我正在使用python pandas处理一些数据。我已使用以下代码将数据导出到excel文件。writer = pd.ExcelWriter('Data.xlsx'); wrong_data.to_excel(writer,"Names which are wrong", index = False); writer.…

尝试从nyc Wiki页面中的高中列表中获取所有高中名称。我已经写了足够多的脚本,可以让我获取包含在高中,学业和入学条件列表的表的<tr>标记中的所有信息-但是我如何才能缩小到我认为的范围内在td[0]内休息(会弹出KeyError)-只是学校的名称?到目前为止我写的代码:from bs4 import BeautifulSoup from ur…

我想将python scikit-learn模型导出到PMML。哪个python软件包最合适?我阅读了有关Augustus的内容,但是我无法使用scikit-learn模型找到任何示例。 python大神给出的解决方案 SkLearn2PMML是 JPMML-SkLearn命令行应用程序周围的薄包装。有关受支持的Scikit-Learn Estimator和…

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » lxml etree在之前找到最接近的元素 – python程序员分享
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们