<" /> <" /> <"/>

How do I extract the specific elements of an XML based on attributes within that element in Python 3.9?

31 views Asked by At

I have an example XML file that looks like this:

<House>

  <ParamDefinitionList name="Pets">
    <ParamList name="Pet">
        <Param name="Animal" value="Dog"/>
        <Param name="Name" value="Furlock"/>
        <Param name="Breed" value="Husky"/>
     </ParamList>
      
     <ParamList name="Pet">
        <Param name="Animal" value="Dog"/>
        <Param name="Name" value="Spot"/>
        <Param name="Breed" value="Labrador"/>
     </ParamList>
      
     <ParamList name="Pet">
        <Param name="Animal" value="Cat"/>
        <Param name="Name" value="Pantrho"/>
        <Param name="Breed" value="Tabby"/>
     </ParamList>
      
     <ParamList name="Pet">
        <Param name="Animal" value="Cat"/>
        <Param name="Name" value="Mittens"/>
        <Param name="Breed" value="Siamese"/>
     </ParamList>
  </ParamDefinitionList>
  
  <ParamDefinitionList name="Rooms">
    <ParamList name="Room">
        <Param name="Kitchen" value="true"/>
        <Param name="Sinks" value="2"/>
    </ParamList>
      
    <ParamList name="Room">
        <Param name="Bathroom" value="true"/>
        <Param name="Sinks" value="2"/>
    </ParamList>
      
    <ParamList name="Room">
        <Param name="Bedroom" value="true"/>
        <Param name="Sinks" value="0"/>
    </ParamList>
    
  </ParamDefinitionList>
</House>

I want to loop through it and extract any elements called "Pets" if they contain the attribute: Animal = Dog.

I can get the attribute where animal = dog, but I have no idea how to link it to the above element of Pet and all the attributes within that element:

import xml.etree.ElementTree as ET
tree = ET.parse(XML)
root = tree.getroot(tree)

dog_param = root.findall(".//Param[@name=Animal][@value="Dog])

What I don't know how to do is to extract the elements, where the attributes = Dog, and store them in a dictionary to update later. I would give you more code, but I don't know where to begin.

Thanks!

0

There are 0 answers