Source code for femagtools.bchxml

#!/usr/bin/env python
#
# convert bch to xml
#
# Author: Ronald Tanner
# 2016-10-20
#
import sys
import re
import io
from .bch import Reader
import xml.etree.ElementTree as el
import xml.dom.minidom


[docs]def usage(): print("femagtools.bchxml <bchfilename>") sys.exit(1)
[docs]def list_to_xml(tag, l): ''' Turn a list into XML ''' if not isinstance(tag, str): try: tag = str(tag) except Exception as e: print("bchxml.list_to_xml(): Can not convert tag {} to str!".format(tag)) pass elem = el.Element(re.sub(r'^(\d+)$', r'w\1', tag)) for v in l: if v is not None: # check against None explicitly to keep ZERO values. thomas.maier/OSWALD if isinstance(v, list): elem.append(list_to_xml('val', v)) elif isinstance(v, dict): elem.append(dict_to_xml('val', v)) else: child = el.Element('val') child.text = str(v) elem.append(child) return elem
[docs]def dict_to_xml(tag, d): ''' Turn a simple dict of key/value pairs into XML ''' if not isinstance(tag, str): try: tag = str(tag) except Exception as e: print("bchxml.dict_to_xml(): Can not convert tag {} to str!".format(tag)) pass elem = el.Element(re.sub(r'^(\d+)$', r'w\1', tag)) for key, val in d.items(): if val is not None: # check against None explicitly to keep ZERO values. thomas.maier/OSWALD if isinstance(val, dict): elem.append(dict_to_xml(key, val)) elif isinstance(val, list): elem.append(list_to_xml(key, val)) else: child = el.Element(key) child.text = str(val) elem.append(child) return elem
if __name__ == "__main__": if len(sys.argv) != 2: usage() filename = sys.argv[1] bchresults = Reader() with io.open(filename, encoding='latin1', errors='ignore') as f: bchresults.read(f.readlines()) reparsed = xml.dom.minidom.parseString(el.tostring( dict_to_xml("bch", bchresults), method='xml')) with io.open(filename.split('.')[0]+'.xml', mode='w', encoding='utf-8') as f: f.write(reparsed.toprettyxml(indent=' '))