Please help transfer data from an XML file to an array and transfer data from this array to a MySQL database table. test.xml

<?xml version="1.0" encoding="UTF-8"?> <root> <Result RC="0" /> <Invoices> <Invoice Invoice_ID="12123" Invoice_Owner_ID="232" ICN_ID="2321" ICN_Owner_ID="321" Receipt_Date="15.12.2016"> <Receiver CompanyName="com1" ContactName="name1" Address="adr1" /> <Shipper CompanyName="com2" Address="adr2" /> </Invoice> <Invoice Invoice_ID="23232" Invoice_Owner_ID="32" ICN_ID="3213" ICN_Owner_ID="32" Receipt_Date="15.12.2016"> <Receiver CompanyName="com3" ContactName="name2" Address="adr3" /> <Shipper CompanyName="com4" Address="adr4" /> </Invoice> <Invoice> ............ </Invoice> </Invoices> </root> 

test.py

 Начало скрипта import xml.etree.ElementTree as ET tree = ET.parse("test.xml") root = tree.getroot() for elem in root.iter('Invoice'): invoice_id = elem.get('Invoice_ID') invoice_owner_id = elem.get('Invoice_Owner_ID') icn_id = elem.get('ICN_ID') icn_owner_id = elem.get('ICN_Owner_ID') receipt_date = elem.get('Receipt_Date') print(invoice_id, invoice_owner_id, icn_id, icn_owner_id, receipt_date) 

    1 answer 1

    Do you need a regular array? If yes, then here:

      myArray = [] for elem in root.iter('Invoice'): invoice_id = elem.get('Invoice_ID') invoice_owner_id = elem.get('Invoice_Owner_ID') icn_id = elem.get('ICN_ID') icn_owner_id = elem.get('ICN_Owner_ID') receipt_date = elem.get('Receipt_Date') print(invoice_id, invoice_owner_id, icn_id, icn_owner_id, receipt_date) myArray.append({'Invoice_ID':invoice_id, 'Invoice_Owner_ID':invoice_owner_id, 'ICN_ID':icn_id, 'ICN_Owner_ID':icn_owner_id, 'Receipt_Date':receipt_date}) 

    Thus, you get an array of dictionaries that can be accessed like this:

     invoice = myArray[1]['Invoice_ID'] 
    • produces: IndexError: list assignment index out of range - Vladimir
    • Oh, got it! Sorry, confused with another language. I'll change the answer now. - Michael Vaysman
    • Corrected the answer :) - Michael Vaysman
    • Thank you, @michael. - Vladimir