I have this XML from a SOAP call:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<SessionID xmlns="http://www.gggg.com/oog">5555555</SessionID>
<QueryResult xmlns="http://www.gggg.com/oog/Query" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Code>testsk</Code>
<Records>
<Record>
<dim_id>1</dim_id>
<resource_full_name>Administrator, Sir</resource_full_name>
<resource_first_name>Sir</resource_first_name>
<resource_last_name>Administrator</resource_last_name>
<resource_email>[email protected]</resource_email>
<resource_user_name>admin</resource_user_name>
</Record>
<Record>
<dim_id>2</dim_id>
<resource_full_name>scheduler, scheduler</resource_full_name>
<resource_first_name>scheduler</resource_first_name>
<resource_last_name>scheduler</resource_last_name>
<resource_email>[email protected]</resource_email>
<resource_user_name>scheduler</resource_user_name>
</Record>
My goal: To parse each Record's sub-elements <dim_id> ... <resource_user_name> and save each record as a row in a CSV.
My Code:
dim_id_list = []
full_name_list = []
first_name_list = []
last_name_list = []
resource_email_list = []
resource_user_name_list = []
root = et.parse('xml_stuff.xml').getroot()
for dim_id in root.iter('{http://www.gggg.com/oog/Query}dim_id'):
dim_id_list.append(dim_id.text)
for resource_full_name in root.iter('{http://www.gggg.com/oog/Query}resource_full_name'):
full_name_list.append(resource_full_name.text)
for resource_first_name in root.iter('{http://www.gggg.com/oog/Query}resource_first_name'):
first_name_list.append(resource_first_name.text)
for resource_last_name in root.iter('{http://www.gggg.com/oog/Query}resource_last_name'):
last_name_list.append(resource_last_name.text)
for resource_email in root.iter('{http://www.gggg.com/oog/Query}resource_email'):
resource_email_list.append(resource_email.text)
for resource_user_name in root.iter('{http://www.gggg.com/oog/Query}resource_user_name'):
resource_user_name_list.append(resource_user_name.text)
rows = zip(dim_id_list, full_name_list, first_name_list, last_name_list, resource_email_list, resource_user_name_list)
with open('test.csv', "w", encoding='utf16', newline='') as f:
writer = csv.writer(f)
for row in rows:
writer.writerow(row)
Is there a better way to loop through the Records? This code is terribly verbose. I tried this:
for record in root.findall('.//{http://www.gggg.com/oog/Query}Record'):
dim_id = record.find('dim_id').text
# Extract each attribute, save to list. etc.
But I am getting attribute errors trying to access each record's text property.