Я относительно новичок в python и в настоящее время пытаюсь разобрать и преобразовать XML в CSV. Мой код работает, если родительский и дочерний теги существуют, но я получаю это сообщение об ошибке:
Phone = element [3] [0] .text
IndexError: дочерний индекс вне диапазона
когда тег существует в первом атрибуте, но не во втором атрибуте.
Я пытался вставить заявление if, но оно не совсем сработало. Вот как выглядит xml и мой оригинальный код. Если кто-нибудь может указать мне правильное направление, я был бы признателен!
XML-файл
<Member>
<Person>
<FirstName>JOHN</FirstName>
<LastName>DOE</LastName>
<Address>
<Address1>1234 TEST DR</Address1>
<Address2></Address2>
<City>SIMCITY</City>
<State>TD</State>
<ZipCode>12345 </ZipCode>
</Address>
<Phone>
<AreaCode>212</AreaCode>
<PhoneNumber>2223333</PhoneNumber>
</Phone>
</Person>
<Person>
<FirstName>JANE</FirstName>
<LastName>DOE</LastName>
<Address>
<Address1>1234 DEE ST</Address1>
<Address2></Address2>
<City>LCITY</City>
<State>TD</State>
<ZipCode>12345 </ZipCode>
</Address>
</Person>
</Member>
Мой код:
import csv
import xml.etree.ElementTree as ET
tree = ET.parse("Stack.xml")
root = tree.getroot()
xml_data_to_csv =open('Out.csv','w')
Csv_writer=csv.writer(xml_data_to_csv)
list_head=[]
count=0
for element in root.findall('Person'):
person = []
address_list = []
phone_list = []
#get head node
if count == 0:
FirstName = element.find('FirstName').tag
list_head.append(FirstName)
LastName = element.find('LastName').tag
list_head.append(LastName)
Address = element[2].tag
list_head.append(Address)
Phone = element[3].tag
list_head.append(Phone)
Csv_writer.writerow(list_head)
count = count +1
#get child node
FirstName = element.find('FirstName').text
person.append(FirstName)
LastName = element.find('LastName').text
person.append(LastName)
Address = element[2][0].text
address_list.append(Address)
Address2 = element[2][1].text
address_list.append(Address2)
City = element[2][2].text
address_list.append(City)
State = element[2][3].text
address_list.append(State)
ZipCode = element[2][4].text
address_list.append(ZipCode)
person.append(address_list)
Phone = element[3][0].text
phone_list.append(Phone)
AreaCode = element[3][1].text
phone_list.append(AreaCode)
person.append(phone_list)
#Write List_nodes to csv
Csv_writer.writerow(person)
xml_data_to_csv.close()