diff --git a/addons/web/common/xml2json.py b/addons/web/common/xml2json.py index ab134b09786..df3aad67fa5 100644 --- a/addons/web/common/xml2json.py +++ b/addons/web/common/xml2json.py @@ -3,38 +3,24 @@ # New BSD Licensed # # URL: http://code.google.com/p/xml2json-direct/ -import simplejson -from xml.etree import ElementTree -class Xml2Json(object): - @staticmethod - def convert_to_json(s): - return simplejson.dumps( - Xml2Json.convert_to_structure(s), sort_keys=True, indent=4) - - @staticmethod - def convert_to_structure(s): - root = ElementTree.fromstring(s) - return Xml2Json.convert_element(root) - - @staticmethod - def convert_element(el, preserve_whitespaces=False): - res = {} - if el.tag[0] == "{": - ns, name = el.tag.rsplit("}", 1) - res["tag"] = name - res["namespace"] = ns[1:] - else: - res["tag"] = el.tag - res["attrs"] = {} - for k, v in el.items(): - res["attrs"][k] = v - kids = [] - if el.text and (preserve_whitespaces or el.text.strip() != ''): - kids.append(el.text) - for kid in el: - kids.append(Xml2Json.convert_element(kid, preserve_whitespaces)) - if kid.tail and (preserve_whitespaces or kid.tail.strip() != ''): - kids.append(kid.tail) - res["children"] = kids - return res +def from_elementtree(el, preserve_whitespaces=False): + res = {} + if el.tag[0] == "{": + ns, name = el.tag.rsplit("}", 1) + res["tag"] = name + res["namespace"] = ns[1:] + else: + res["tag"] = el.tag + res["attrs"] = {} + for k, v in el.items(): + res["attrs"][k] = v + kids = [] + if el.text and (preserve_whitespaces or el.text.strip() != ''): + kids.append(el.text) + for kid in el: + kids.append(from_elementtree(kid, preserve_whitespaces)) + if kid.tail and (preserve_whitespaces or kid.tail.strip() != ''): + kids.append(kid.tail) + res["children"] = kids + return res diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 191f184da5b..7b2ad5b311c 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -933,7 +933,7 @@ class View(openerpweb.Controller): xml = self.transform_view(arch, session, evaluation_context) else: xml = ElementTree.fromstring(arch) - fvg['arch'] = web.common.xml2json.Xml2Json.convert_element(xml, preserve_whitespaces) + fvg['arch'] = web.common.xml2json.from_elementtree(xml, preserve_whitespaces) for field in fvg['fields'].itervalues(): if field.get('views'):