首页 > 解决方案 > 如何使用 Element.findall() 搜索标签并打印其值

问题描述

我决定冒险python v2.6.6在其他选择中查找和打印文件中的特定tag内容xml。我最终得到了多个for..loop我不满意的结果,我认为可能有更好的方法。

我在这里搜索,看起来Element.findall()很有希望,但打印的是空值。这是示例文件 ( test.xml)。

<?xml version='1.0' encoding='UTF-8'?>
<parent>
   <first>
        <a>123</a>
        <b>abc</b>                
        <c>
          <d>987</d>
          <e>
            <f>xxx</f>
            <f>yyy</f>
            <f>zzz</f>
          </e>
         </c>
    </first>
    <second>
         <a>456</a>
         <b>efg</b>             
         <c>
          <d>345</d>
          <e>
            <f>ttt</f>
            <f>hhh</f>
            <f>www</f>
          </e>
         </c>
     </second>
</parent>

我的目标是希望标签identify和多个.print<d><f>

这是我第一次尝试findall()查找标签<b>,但打印了空值..

import xml.etree.ElementTree as ET

root = ET.parse('test.xml').getroot()
b_tag = root.findall('first/b')
print b_tag

有经验的人可以python指导我做错了什么,以便我更好地了解如何使用它api吗?

标签: python

解决方案


您的代码与 完美配合b_tag,您只需要使用该.text字段。所以,这是里面的所有信息<d><f>你想要的:

import xml.etree.ElementTree as ET

root = ET.parse('test.xml').getroot()
d_tags = root.findall('./*/c/d')
print([t.text for t in d_tags])
# ['987', '345']

f_tags = root.findall('./*/c/e/f')
print([t.text for t in f_tags])
# ['xxx', 'yyy', 'zzz', 'ttt', 'hhh', 'www']

推荐阅读