# Номер в ИСУ: 316304 # Вариант: 8 class XmlParser: class Node: parent: 'Node' = None children = None attribute: str = '' depth: int = 0 def __init__(self, parent: 'Node', children, attribute: str, depth: int): self.parent = parent self.children = children self.attribute = attribute self.depth = depth def __str__(self): return f'' def get_full_path(self, sep: str) -> str: attributes = [] node = self while node is not None: attributes.append(node.attribute) node = node.parent path = sep.join(attributes[::-1]) return path root: Node = None xml = '' json = '' proto3 = '' wml = '' tsv = ['', ''] csv = ['', ''] def parse_xml(self, xml: str): self.xml = xml node = None depth = 0 for line in xml.splitlines(): line = line.strip() if line[:2] == '') attribute = line[1:value_start] value = line[value_start + 1:value_end] element = self.Node(node, value, attribute, depth) node.children.append(element) def form_json(self, data: Node): if isinstance(data.children, list): self.json += '\t' * (data.depth + 1) + f'"{data.attribute}": ' + '{\n' for node in data.children: self.form_json(node) self.json = self.json[:-2] + '\n' + '\t' * (data.depth + 1) + '},\n' else: self.json += '\t' * (data.depth + 1) + f'"{data.attribute}": "{data.children}",\n' def load_json(self): self.json = '' self.form_json(self.root) self.json = '{\n' + self.json[:-2] + '\n}' def form_csv(self, data: Node): if isinstance(data.children, list): for node in data.children: self.form_csv(node) else: self.csv[0] += data.get_full_path('/') + ',' self.csv[1] += data.children + ',' def load_csv(self): self.csv = ['', ''] self.form_csv(self.root) self.csv[0] = self.csv[0][:-1] self.csv[1] = self.csv[1][:-1] self.csv = '\n'.join(self.csv) def form_tsv(self, data: Node): if isinstance(data.children, list): for node in data.children: self.form_tsv(node) else: self.tsv[0] += data.get_full_path('.') + '\t' self.tsv[1] += data.children + '\t' def load_tsv(self): self.tsv = ['', ''] self.form_tsv(self.root) self.tsv[0] = self.tsv[0][:-1] self.tsv[1] = self.tsv[1][:-1] self.tsv = '\n'.join(self.tsv) def get_json(self) -> str: return self.json def get_xml(self) -> str: return self.xml def get_proto3(self) -> str: return self.proto3 def get_tsv(self) -> str: return str(self.tsv) def get_csv(self) -> str: return str(self.csv) if __name__ == '__main__': file = open('schedule.xml', encoding='utf8') contents = file.read() xml_parser = XmlParser() xml_parser.parse_xml(contents) xml_parser.load_json() file = open('schedule.json', 'w', encoding='utf8') file.writelines(xml_parser.get_json()) print(xml_parser.get_json())