我正在处理一个巨大的xml文件,并尝试从不同的元素中提取信息。
import xml.etree.ElementTree as ET
tree = ET.parse('t.xml')
root = tree.getroot()
要查找元素,我使用find方法:
elm = root.find('.//Element[@elmid="1234"]')
从中我提取信息,另外我需要父元素中的信息。但是elm.find('..')
只返回None
,如下所述:
https://docs.python.org/3/library/xml.etree.elementtree.html
现在我使用以下方法:
prt = root.find('.//Element[@elmid="1234"]/..')
elm = prt.find('/Element[@elmid="1234"]')
在我看来这有点不自然,但确实有效。
你知道更好的方法吗?
你知道为什么只返回None
?
xml.etree
API只支持有限版本的XPath。XPath表达式状态的^{直接获取父元素是not supported in the ^{} API 。因此,我建议使用^{} ,在这里您可以简单地使用^{} 来获取父元素:
lxml
也有一个完整的XPath 1.0 implementation,因此elem.xpath('..')
也可以工作。我有一个类似的问题,我有点创造性。结果没有什么能阻止我们自己添加亲子信息。一旦我们不再需要它,我们可以把它脱掉。
相关问题 更多 >
编程相关推荐