XML 树 - 仅当主标签具有特定 属性 值时才提取子标签值

XML tree - extract the subtags values only if the main tag has a certain property value

我是 XML 的新手,正在研究解析器,让我先说明一下我的问题:

<animals>
      <pet type="dog">
        <name>Jack</name>
        <name>Benny</name>
        <name>Will</name>
      </pet>
      <pet type="cat">
        <name>Luna</name>
        <name>Lilith</name>
        <name>Willow</name>
      </pet>
      <pet type="rabbit">
        <name>Lilly</name>
        <name>Robin</name>
      </pet>
</animals>

我只想从这棵树中提取狗的名字(Jack、Benny、Will)。 我试过:


name = file.getElementsByTagName('name')
pets = file.getElementsByTagName('pet')
for i in pets:
    if (i.attributes['type'].value == "dog"):
            for j in name: 
               print(j.firstChild.data)

我得到了所有的名字,因为我正在使用整个宠物子集。我的问题是如何表明我想明确 select 标签并循环遍历它以仅获取 3 个名称。 我想坚持 xml.dom.minidom 而不是使用元素树。 提前致谢!

希望对您有所帮助:

from xml.dom.minidom import parseString

xml_string = '''
<animals>
      <pet type="dog">
        <name>Jack</name>
        <name>Benny</name>
        <name>Will</name>
      </pet>
      <pet type="cat">
        <name>Luna</name>
        <name>Lilith</name>
        <name>Willow</name>
      </pet>
      <pet type="rabbit">
        <name>Lilly</name>
        <name>Robin</name>
      </pet>
</animals>
'''

root = parseString(xml_string)

for pet in root.getElementsByTagName('pet'):    
    if pet.attributes['type'].value == 'dog':
        names = pet.getElementsByTagName('name')
        print([name.firstChild.data for name in names])

输出:

['Jack', 'Benny', 'Will']