Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to parse this xml file which have two root elements?

<objects>
   <object>
      <record>
            <net_amount>3657.82</net_amount>
            <order_number>47004603</order_number>
            <invoice_source>Email</invoice_source>
            <invoice_capture_date>2022-11-13</invoice_capture_date>
            <document_type>INVOICE</document_type>
            <data_capture_provider_code>00001</data_capture_provider_code>
            <data_capture_provider_reference>594826</data_capture_provider_reference>
            <document_capture_provide_code>00002</document_capture_provide_code>
            <document_capture_provider_ref>594826</document_capture_provider_ref>
      </record>
   </object>
</objects>

how can i parse this xml data. this data have two "object" elements. when i remove one "object" i am able to parse this. but otherwise i cannot parse it.

for file in files:
    tree = ET.parse(file)
    root = tree.getroot()
    for i in root.findall("record"):
        net_amount = i.find("net_amount").text
        order_number = i.find("order_number").text
        

when i use this above code i want to get the "net_amount" and "order_number". but when i remove one object from the xml file it works fine. but i have so many files like this. is there any method to make it work. please help me

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

You’ve done the hard part already, all you have to do is to wrap your code in a loop that will go through the object tags.

for file in files:
    tree = ET.parse(file)
    root = tree.getroot() #This is the outer "objects" tags
    for obj in root.findall("object"): #Loop over all object in it
        for i in obj.findall("record"): #Resume the original search in the specific object tag rather than the outer one
            net_amount = i.find("net_amount").text
            order_number = i.find("order_number").text
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading