#python #xml #lxml
Как распарсить так, чтоб в выводе было: suite source и соответствующие ему kw name, arguments, status? Проблема в том, что я не знаю как выводить список suite source, а в нем еще список kw name, arguments, status. ${host} ${port} 220 220 localhost SMTP Server (JAMES SMTP Server 2.3.2)(MSK) name 250 250 localhost Hello name (localhost [127.0.0.1]) Test "g_helo_with_C_OrJoin273_" in keyword-driven format. ${host} ${port} 220 220 localhost SMTP Server (JAMES SMTP Server 2.3.2) 14:50:18 +0400 (MSK) name 255 250 localhost Hello name (localhost [127.0.0.1]) Test "g_helo_with_C_OrJoin273_helo_resp_2_2_trace0001_L" in keyword-driven format.
Ответы
Ответ 1
Вам поможет minidom: from xml.dom import minidom om = minidom.parseString(x) root = om.getElementsByTagName('robot')[0] # Далее что-то, к примеру: def walk(x, d=0): print(' ' * d + str(x)) if x.attributes is not None: for i, j in x.attributes.items(): print(' ' * d + ' | ' + i + ': ' + j) for i in x.childNodes: walk(i, d+1) walk(root)Ответ 2
Для сравнения, код на основе xml.etree.ElementTree: #!/usr/bin/env python import xml.etree.ElementTree as etree robot = etree.parse('input.xml').getroot() for suite in robot.iter('suite'): print("suite " + suite.get('source')) for kw in suite.findall('./test/kw'): print("\tkw" + kw.get('name')) for arg in kw.find('arguments') or []: print("\t\targ " + arg.text) print("\t\t" + "\n\t\t".join(map("=".join, sorted(kw.find('status').items())))) Output suite /home/Robot suite /home/Join273_helo_resp_2_1_trace0001_L.txt kwSmtpLibrary.Connect To Smtp arg ${host} arg ${port} endtime=20150623 14:50:18.241 starttime=20150623 14:50:18.234 status=PASS kwSmtpLibrary.Check Response arg 220 endtime=20150623 14:50:18.257 starttime=20150623 14:50:18.241 status=PASS ... suite /home/_2_2_trace0001_L.txt kwSmtpLibrary.Connect To Smtp arg ${host} arg ${port} endtime=20150623 14:50:18.275 starttime=20150623 14:50:18.274 status=PASS kwSmtpLibrary.Check Response arg 220 endtime=14:50:18.277 starttime=20150623 14:50:18.275 status=PASS ...
Комментариев нет:
Отправить комментарий