我有一个类似的XML文件:
<a>
<b>
<c>
</c>
</b>
<d>
<e>
<f>Value</f> <!-- I want to extract this -->
</e>
</d>
<d>
<e>
<f>Value2</f> <!-- and this -->
</e>
</d>
.
.
.
我正在尝试使用以下Python代码从节点中检索所有数据,即Value1,Value2 .....我的理解是否正确?
import xml.etree.ElementTree as ET
tree = ET.parse('file.xml')
for elem in tree.iterfind('a/d/e/f'):
print(elem.tag, elem.attrib)
然而,我只是得到一个空循环。我也尝试过使用在线示例的findall()但无处可去。我只想验证我正确理解他们的能力。
答案 0 :(得分:0)
这里的问题是你的XPath开始寻找根目录下的a
子节点 - 但根是 a
节点,{{1 }}和b
节点是它的子节点。
如果您只打印出来,可以看到这个:
d
你可能想要的是:
>>> print(tree)
<Element 'a' at 0x10bbe4bd8>
>>> print(tree.getchildren())
[<Element 'b' at 0x10bf8e318>,
<Element 'd' at 0x10bf8ef98>,
<Element 'd' at 0x10be1e818>]
或者,正如Tim在评论中指出的那样,如果你的for elem in tree.iterfind('d/e/f'):
是解析文件而不是树根的结果,那么你会想要这样做:
tree