Невозможно выполнить цикл внутри элементов XML при анализе с использованием python - PullRequest
0 голосов
/ 18 сентября 2018

Я использовал как 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.

Может кто-нибудь, пожалуйста, помогите мне так же, используя minidom и Etree

Заранее спасибо

...