Python XML获取名称为“的所有标记”;X";

Python XML获取名称为“的所有标记”;X";,python,xml,elementtree,Python,Xml,Elementtree,我有一个XML文件,看起来像: <a> <b> <c> </c> </b> <d> <e> <f>Value</f> <!-- I want to extract this --> </e> </d> <d> <

我有一个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>
   .
   .
   .

然而,我只是得到一个空循环。我还使用在线示例尝试了findall(),但没有任何结果。我只是想验证我是否正确理解了它们的功能。

这里的问题是,XPath开始在根下查找
a
子节点,但根是
a
节点,
b
d
节点是它的子节点

如果您只是将内容打印出来,您可以看到:

>>> print(tree)
<Element 'a' at 0x10bbe4bd8>
>>> print(tree.getchildren())
[<Element 'b' at 0x10bf8e318>,
 <Element 'd' at 0x10bf8ef98>,
 <Element 'd' at 0x10be1e818>]
或者,正如Tim在评论中指出的,如果您的
树是解析文件的结果,而不是树的根,则您需要执行以下操作:

root = tree.getroot()
for elem in root.iterfind(‘d/e’f’):

如果您将该XML片段转换为一个完整的文档(可能只是在末尾添加
),那么调试就会更容易。更好的方法是,将XML放在源代码中的字符串中,并将示例更改为使用该字符串而不是文件,这样您就有了一个完美的示例。我得到了回溯(最近一次调用):文件“”,第1行,打印(tree.getchildren())AttributeError:'ElementTree'对象没有属性'getchildren'@user997112,这正是一个重要的原因。它在我通过猜测代码所做的事情而创建的示例中起作用,但我显然猜错了。从您的回溯来看,这里的问题是
ElementTree
对象没有子对象,但是
Element
对象有子对象。因此,您需要构建树,然后获取根元素以使用
getchildren()
。我猜想abarnert使用的是
tree=ET.fromstring(…)
构建树并返回根元素,而user997112使用的是
tree=ET.parse('file.xml')
。实际上,您应该这样做:
root=ET.fromstring(xml\u file\u as\u a\u string)
或者:
tree=ET.parse('file.xml')
then
root=tree.getroot()
for elem in tree.iterfind('d/e/f'):
root = tree.getroot()
for elem in root.iterfind(‘d/e’f’):