Невозможно выполнить цикл внутри элементов XML при разборе с использованием Python
Я использовал как minidom, так и xml.etree.ElementTree для анализа элементов и их значений.
но не в состоянии разобрать его правильно
код:
from xml.dom import minidom
import xml.etree.ElementTree as ET
import xmltodict
xml_body = """ <soap:Body><ListCampaignsResponse xmlns="https://ws.campaigner.com/2013/01"><ListCampaignsResult><CampaignDescription><Id>30550904</Id><Name>Tuesday, September 11, 2018</Name><Status>Sent</Status><Type>OneOff</Type><FromName>testMPT.com</FromName><FromEmail>med_BAlday@Test.com</FromEmail><Subject>TestCampaignLink</Subject><ProjectId>0</ProjectId><Format>HTML</Format><CreatedDate>2018-09-11T10:48:03.497</CreatedDate><LastModifiedDate>2018-09-11T10:55:38.833</LastModifiedDate></CampaignDescription><CampaignDescription><Id>30634141</Id><Name>TestTemplateAPI_2</Name><Status>Sent</Status><Type>OneOff</Type><FromName>testMPT.com</FromName><FromEmail>med_BAlday@Test.com</FromEmail><Subject>TestCampaign_API2</Subject><ProjectId>0</ProjectId><Format>HTML</Format><CreatedDate>2018-09-18T09:44:11.047</CreatedDate><LastModifiedDate>2018-09-18T09:48:51.973</LastModifiedDate></CampaignDescription></ListCampaignsResult></ListCampaignsResponse></soap:Body>"""
my_xmltodict_csv = []
my_minidom_csv = []
my_ET_csv = []
#using xmltodict - running okay
xmldict =xmltodict.parse(xml_body)
for row in xmldict['soap:Body']['ListCampaignsResponse']['ListCampaignsResult']['CampaignDescription']:
print row['Id']
my_xmltodict_csv.append(row)
#using ElementTree --not running
root = ET.fromstring(xml_body)
for CampaignDescription in root.iter('CampaignDescription'):
print CampaignDescription.attrib
row_ET={}
row_ET['Id'] = CampaignDescription.text
row_ET['Name'] = CampaignDescription.text
my_minidom_csv.append(row_ET)
#using minidom --not running
xmldoc = minidom.parseString(xml_body)
itemlist = xmldoc.getElementsByTagName('CampaignDescription')
print(len(itemlist))
for child in itemlist:
row_mini={}
row_mini['Id'] = child.firstChild.nodeValue
row_mini['Name'] = child.firstChild.nodeValue
row_mini['Status'] = child.firstChild.nodeValue
my_minidom_csv.append(row_mini)
Только с xmltodict я могу получить необходимые данные в dict.
Может кто-нибудь, пожалуйста, помогите мне так же, используя минидом и Etree
заранее спасибо