diff options
Diffstat (limited to 'addons/web/common/xml2json.py')
| -rw-r--r-- | addons/web/common/xml2json.py | 52 |
1 files changed, 20 insertions, 32 deletions
diff --git a/addons/web/common/xml2json.py b/addons/web/common/xml2json.py index 1f2e74691b9..df3aad67fa5 100644 --- a/addons/web/common/xml2json.py +++ b/addons/web/common/xml2json.py @@ -4,35 +4,23 @@ # # URL: http://code.google.com/p/xml2json-direct/ -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 |
