Python XML获取名称的所有标签" X"

时间:2018-03-23 17:10:57

标签: python xml elementtree

我有一个类似的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()但无处可去。我只想验证我正确理解他们的能力。

1 个答案:

答案 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