import lxml.etree from lxml import etree from aktion_status import AktionsStatus class App: def __init__(self): pass def read_xml(self, path, hide_empty=True): with open(path, encoding="utf-8") as xml_file: head = xml_file.readline() xml = xml_file.read() root = etree.fromstring(xml) for data in root.getchildren(): for elem in data.getchildren(): self.read_element(elem, hide_empty=hide_empty) def read_element(self, element, sign="", hide_empty=True): element_text = element.text if hide_empty and not element_text or isinstance(element, lxml.etree._Comment) or isinstance(element, lxml.etree._ProcessingInstruction): pass elif element.tag.find("AKTION") > -1: num = int(element_text) print(sign, self.clean_xmlns(element.tag), AktionsStatus.get_status(num)) else: print(sign, self.clean_xmlns(element.tag), element.text if element.text else "") if len(element.getchildren()) > 0: for el in element.getchildren(): self.read_element(el, sign+"\t") def clean_xmlns(self, tag_text): if tag_text and tag_text.startswith("{"): return tag_text.split("}")[1] return tag_text