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和…