def create_structures(fn, root=None): with open(fn, "r") as fo: data = json.load(fo) structures = [] build_structure(data, structures, name=root) return remove_equal(structures)
for child in elem: if len(child.attrib) == 0 and len(child) == 0: fields[child.tag] = String() else: fields[child.tag] = build_structure(child, structures) struct = Struct(elem.tag, fields, attributes) structures.append(struct) return struct def create_structures(fn): root = parse_xml(fn) structures = [] build_structure(root, structures) return structures if __name__ == "__main__": import argparse parser = argparse.ArgumentParser() parser.add_argument("source", help="Source file to create structures from") parser.add_argument("--merge-similar", help="Merge similar structures, not just equal", action="store_true") args = parser.parse_args() structures = create_structures(args.source) if args.merge_similar: structures = remove_similar(structures) else: structures = remove_equal(structures) structures = rename_duplicates(structures) for struct in structures: print(print_xml(struct))