我正在使用elementtree扫描从文本文件中提取的xml字符串。

<root>
    <branch_a>
        <leaf>foo</leaf>
    </branch_a>
    <branch_b>
        <another_leaf>bar</another_leaf>
    </branch_b>
</root>

当我解析它并试图找到叶节点时,不会得到任何结果:
>>> elem_tree = xml.etree.ElementTree.fromstring(xml_string)
>>> leaf_text = elem_tree.findtext('leaf')
>>> leaf_text is None
True

但是当我穿过树的时候,一切都很好:
>>> elem_tree.findtext('branch_a/leaf')
'foo'

>>> branch = elem_tree.find('branch_a')
>>> branch.findtext('leaf')
'foo'

有没有办法让elementtree扫描整棵树?我的树枝名字是动态的,我正在寻找的叶子可以生活在任何树枝下。
我可以用minidom来实现这一点,但遇到了其他限制。这是我在那里做的,供参考(错误检查剥离)。
>>> xml_doc = xml.dom.minidom.parseString(xml_string)
>>> leaf_node = xml_doc.getElementsByTagName('leaf')
>>> leaf_node[0].firstChild.nodeValue
'foo'

最佳答案

findtext使用elementtree样式的path语句,因此您只扫描直接子级。这将扫描整个树(请参见element xpath):

leaf_text = elem_tree.findtext('.//leaf')

关于python - ElementTree findtext找不到叶节点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26429249/

10-11 22:23