diff --git a/Backend-libXML/Parser.py b/Backend-libXML/Parser.py index f991b70..4cd5ac7 100644 --- a/Backend-libXML/Parser.py +++ b/Backend-libXML/Parser.py @@ -1,31 +1,18 @@ from lxml import etree from io import BytesIO -def prettify(source: str) -> str: - """Method used to pretty format given XML - :param source: XML - :return: prettified XML +def format(source: str, prettify: bool) -> str: + """Method used to format XML + + :param source: XML to format + :param prettify: sets if XML must be prettified + (have added intendations etc.) or not + :return: formatted XML """ - prolog = "" - prolog_start = source.find("") + 2 - prolog = source[prolog_start:prolog_end] + "\n" - source = source[prolog_end: ] - - parser = etree.XMLParser(remove_blank_text=True) - xml = etree.fromstring(source, parser=parser) - return prolog + etree.tostring(xml, pretty_print=True).decode() -def minimize(source: str) -> str: - """Method used to minimize XML by deleting not needed whitespaces. - - :param source: XML - :return: minimized XML - """ - + # Prolog is removed when XML is parsed + # so program has to copy it prolog = "" prolog_start = source.find(" str: prolog = source[prolog_start:prolog_end] source = source[prolog_end: ] + byte_input = BytesIO(source.encode("utf-8")) parser = etree.XMLParser(remove_blank_text=True) - xml = etree.fromstring(source, parser=parser) - return prolog + etree.tostring(xml, pretty_print=False).decode() + xml = etree.parse(byte_input, parser=parser) + + if prettify: + prolog += "\n" + + return prolog + etree.tostring(xml, pretty_print=prettify).decode() def xpath(source: str, xpath: str) -> str: diff --git a/Backend-libXML/main.py b/Backend-libXML/main.py index 117b089..d618dd2 100644 --- a/Backend-libXML/main.py +++ b/Backend-libXML/main.py @@ -74,9 +74,9 @@ def process_xml(request: request, type: str) -> str: elif (type == "xpath"): response_json['result'] = Parser.xpath(data, process) elif (type == "prettify"): - response_json['result'] = Parser.prettify(data) + response_json['result'] = Parser.format(data, True) elif (type == "minimize"): - response_json['result'] = Parser.minimize(data) + response_json['result'] = Parser.format(data, False) else: raise ValueError("Valid operation types are: xsd, xslt, xpath")