How to convert structured python list to xml -
i know how can convert in easy way structured python list xml , store xml file? skip lines 'none' inside:
[ ['none', none, none, none, none, none, 'false', 'none', 'none'], ... ['none', none, none, none, none, none, 'false', 'none', 'none'] ] this how structured list looks like:
[ [ 'this first case', 'case001', 'linux', '2017-08-18 06:45:58', '2017-08-18 06:46:47', '55', 'pass', [], [ ['none', none, none, none, none, none, 'false', 'none', 'none'], ... ['none', none, none, none, none, none, 'false', 'none', 'none'] ] ], [ 'this second case', 'case002', 'linux', '2017-08-18 07:45:58', '2017-08-18 07:46:47', '65', 'pass', [], [ ['none', none, none, none, none, none, 'false', 'none', 'none'], ... ['none', none, none, none, none, none, 'false', 'none', 'none'] ] ], ... ] for xml don't need fields, don't mind if easier parse fields! imported xml file should this:
<case> <header>this first case</header> <name>case001</name> <age>linux</age> <failedsince>0</failedsince> <skipped>false</skipped> <duration>55</duration> <status>passed</status> </case> ...
with more reading figured solution works needs.
the main scope convert above structured list xml specific fields , values.
the below code solution:
import pickle import pprint import xml.etree.celementtree et suite = et.element('suite') testsuiteresults = [] # reading file stored pickle.dump structured python list try: fileread = open('results.log','rb') testsuiteresults = pickle.load(fileread) fileread.close() except ioerror error_msg: print 'i/o error(%s): %s'%(error_msg.errno, error_msg.strerror) sys.exit(1) # printout check list pp = pprint.prettyprinter(indent=0) pp.pprint(testsuiteresults) s in testsuiteresults: # here structure xml should have, see question text case = et.subelement(suite, 'case') age = et.subelement(case, 'age') classname = et.subelement(case, 'classname') durationcase = et.subelement(case, 'durationcase') failedsince = et.subelement(case, 'failedsince') name = et.subelement(case, 'name') skipped = et.subelement(case, 'skipped') status = et.subelement(case, 'status') stderr = et.subelement(case, 'stderr') stdout = et.subelement(case, 'stdout') # put specific list values specific xml fields # list index 3 & 4 & 7 not used # rest list index 8...len(s) - 3 skipped # last 2 used again s[len(s) - 2] & s[len(s) - 1] age.text = str(s[2]) classname.text = str(s[0]) durationcase.text = str(s[5]) failedsince.text = '0' name.text = str(s[1]) skipped.text = 'false' status.text = str(s[6]) # s[y] has no value stderr field set '-' if str(s[len(s) - 1]): stderr.text = str(s[len(s) - 1]) else: stderr.text = '-' # s[x] stored in field stdout stdout.text = str(s[len(s) - 2]) tree = et.elementtree(suite) tree.write('list2etree.xml') example of testsuiteresults:
[ 0 [ 0 'this first case', 1 'case001', 2 'linux', 3 '2017-08-18 06:45:58', 4 '2017-08-18 06:46:47', 5 '55', 6 'pass', [], [ ['none', none, none, none, none, none, 'false', 'none', 'none'], ... ['none', none, none, none, none, none, 'false', 'none', 'none'] ], x 'path', y 'notes' ], 1 [ 0 '...' 1 .... the list2etree.xml example:
<suite> <case> <age>linux</age> <classname>this first case</classname> <durationcase>55</durationcase> <failedsince>0</failedsince> <name>case001</name> <skipped>false</skipped> <status>pass</status> <stderr>notes</stderr> <stdout>path</stdout> </case> ... </suite>
Comments
Post a Comment