From 893dfde0bb22631576d7fb032a4f54c6336490cc Mon Sep 17 00:00:00 2001 From: Ulrich Carmesin Date: Tue, 3 May 2022 21:35:50 +0200 Subject: [PATCH] xml-tidy --- test/test_xml.py | 94 +++++++++++++++++++++++++++++++++++++++++++++++ utils/xml_tool.py | 44 ++++++++++++++++++++++ 2 files changed, 138 insertions(+) create mode 100644 test/test_xml.py diff --git a/test/test_xml.py b/test/test_xml.py new file mode 100644 index 0000000..aff4f2a --- /dev/null +++ b/test/test_xml.py @@ -0,0 +1,94 @@ +import unittest +#import basic.program +import utils.xml_tool +import utils.xml_tool + +class MyTestCase(unittest.TestCase): + def xtest_xmlTool(self): + #job = basic.program.Job("unit") + args = {"application": "TEST", "application": "ENV01", "modus": "unit", "loglevel": "debug", + "tool": "job_tool", "tdtyp": "csv", "tdsrc": "implement", "tdname": "firstunit", + "modus": "unit"} + beispiel_json = {'root': {'@attr': 'xyz', '$': 'inhalt', "b": "bold"}} + tree = {} + tree["root"] = args + xml = utils.xml_tool.dict2xml(tree) + print(xml) + xml = utils.xml_tool.dict2xml(beispiel_json) + print(xml) + self.assertEqual(1, 1) + f = utils.xml_tool.fcts() + + def xtest_addSingle(self): + tree = {} + # tree = utils.xml_tool.fcts.addMerkmal(tree, '/root/datensegment/satz[@klasse="4711x"]/mm[@name="NAME"]/wert', 2, "abc") + tree = utils.xml_tool.fcts.addMerkmal(tree, '/root/datensegment/kratz/mm[@name="NAME"]/wert', 2, "abc") + self.assertEqual(tree["kratz"]["mm"][0]["wert"], "abc") + self.assertEqual(tree["kratz"]["mm"][0]["@name"], "NAME") + + def xtest_addTwo(self): + # a-b-b + # c-a-a c-a-b + tree = {} + print("--------------------------------------------------------------------------------") + tree = utils.xml_tool.fcts.addMerkmal(tree, '/root/datensegment/kratz/mm[@name="NAME"]/wert', 2, "abc") + print("--------------------------------------------------------------------------------") + tree = utils.xml_tool.fcts.addMerkmal(tree, '/root/datensegment/kratz/mm[@name="LAND"]/wert', 2, "xyz") + baum = {} + baum["root"] = tree + print("<------"+str(baum["root"])) + self.assertEqual(tree["kratz"]["mm"][0]["wert"], "abc") + self.assertEqual(tree["kratz"]["mm"][0]["@name"], "NAME") + self.assertEqual(tree["kratz"]["mm"][1]["wert"], "xyz") + self.assertEqual(tree["kratz"]["mm"][1]["@name"], "LAND") + + def xtest_addOnePaths(self): + tree = {} + print("--------------------------------------------------------------------------------") + tree = utils.xml_tool.fcts.setMerkmal(tree, '/root/datensegment/satz[@klasse="4711x"]/mm[@name="NAME"]/wert', "abc") + baum = {} + baum["root"] = tree + print("<------"+str(baum["root"])) + self.assertEqual(tree["root"]["datensegment"]["satz"][0]["mm"][0]["wert"], "abc") + self.assertEqual(tree["root"]["datensegment"]["satz"][0]["mm"][0]["@name"], "NAME") + self.assertEqual(tree["root"]["datensegment"]["satz"][0]["@klasse"], "4711x") + + def xtest_addTwoPaths(self): + tree = {} + print("--------------------------------------------------------------------------------") + tree = utils.xml_tool.fcts.setMerkmal(tree, '/root/datensegment/satz[@klasse="4711x"]/mm[@name="NAME"]/wert', "abc") + print("--------------------------------------------------------------------------------") + tree = utils.xml_tool.fcts.setMerkmal(tree, '/root/datensegment/satz[@klasse="4711x"]/mm[@name="LAND"]/wert', "xyz") + baum = {} + baum["root"] = tree + print("<------"+str(baum["root"])) + self.assertEqual(tree["root"]["datensegment"]["satz"][0]["mm"][0]["wert"], "abc") + self.assertEqual(tree["root"]["datensegment"]["satz"][0]["mm"][0]["@name"], "NAME") + self.assertEqual(tree["root"]["datensegment"]["satz"][0]["@klasse"], "4711x") + + def test_tidy(self): + tree_dict = { "eins": "zwei", "drei": "vier" } + tree_dict3 = { "eins": { "zwei": { "drei": "vier" } }} + tree_list = { "eins": [ {"zwei": 2, "drei": 3, "vier": 4 } ] } + tree_attr = { "eins": [ {"zwei": 2, "drei": 3, "vier": { "@name": "attr"} } ] } + tree_attrx = { "eins": [ {"zwei": 2, "drei": 3, "vier": { "@name": "attr", "fuenf": 5} } ] } + c = utils.xml_tool.fcts() + xml = c.tidy(tree_dict, 0) + print("-------------------------------------") + print(xml) + xml = c.tidy(tree_dict3, 0) + print("-------------------------------------") + print(xml) + xml = c.tidy(tree_list, 0) + print("-------------------------------------") + print(xml) + xml = c.tidy(tree_attr, 0) + print("-------------------------------------") + print(xml) + xml = c.tidy(tree_attrx, 0) + print("-------------------------------------") + print(xml) + +if __name__ == '__main__': + unittest.main() + diff --git a/utils/xml_tool.py b/utils/xml_tool.py index 2433ac0..f42cb44 100644 --- a/utils/xml_tool.py +++ b/utils/xml_tool.py @@ -178,6 +178,50 @@ class fcts: return array array.append(elem) + def getTidyTab(self, depth=0): + tab = "" + for i in range(0, depth): + tab += "\t" + return tab + + def tidy(self, tree, depth=0): + # tree_dict = { "eins": "zwei", "drei": "vier" } + xml = "" + tab = self.getTidyTab(depth) + + print("tidy "+str(type(tree))) + if isinstance(tree, dict): + print("dict") + for x in tree: + print(x) + if isinstance(tree[x], dict): + newTree = {} + attr = "" + for y in tree[x]: + if y[0:1] == "@": + attr = " "+y[1:]+"=\""+tree[x][y]+"\"" + else: + newTree[y] = tree[x][y] + if len(newTree) > 0: + xml += tab+"<"+x+attr+">\n"+self.tidy(newTree, depth+1)+tab+"\n" + else: + xml += tab+"<"+x+attr+"/>\n" + elif isinstance(tree[x], list): + xml += tab+"<"+x+">\n"+self.tidy(tree[x], depth+1)+tab+"\n" + else: + xml += tab+"<"+x+">"+str(tree[x])+"\n" + elif isinstance(tree, list): + # tree_list = { "eins": [ {"zwei": 2, "drei": 3, "vier": 4 } ] } + print("list") + for x in tree: + if isinstance(x, dict): + xml += self.tidy(x, depth) + else: + xml += tab+"<"+x+">\n"+self.tidy(x, depth)+tab+"" + else: + xml += "<"+str(tree)+">" + return xml + def addMerkmal(baum, pfad, index, wert): """ Eingabe: