python etree pandas_lxml etree在之前找到最接近的元素 - python

xml文件的结构如下

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

from lxml import etree

xmltree = etree.parse(document)

elems = xmltree.xpath('//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 = """

...

...

...

...

...

...

...

...

...

...

...

...

... """

>>> 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 3运算符>>打印到文件 - python

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

我正在尝试创建一个脚本,该脚本循环创建一个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导出数据 - python

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

中捕获特定的 - python

尝试从nyc Wiki页面中的高中列表中获取所有高中名称。我已经写了足够多的脚本,可以让我获取包含在高中,学业和入学条件列表的表的

标记中的所有信息-但是我如何才能缩小到我认为的范围内在td[0]内休息(会弹出KeyError)-只是学校的名称?到目前为止我写的代码:from bs4 import BeautifulSoup from ur…将python scikit学习模型导出到pmml - python

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值