From 2966c343520147c4027ea48f3fea47913da3ebdb Mon Sep 17 00:00:00 2001 From: Michele Lazzeri Date: Thu, 12 Jan 2012 13:28:32 +0100 Subject: [PATCH] correct complex data xml parsing --- djangorestframework/parsers.py | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/djangorestframework/parsers.py b/djangorestframework/parsers.py index 79e14260c..b99423a09 100644 --- a/djangorestframework/parsers.py +++ b/djangorestframework/parsers.py @@ -187,12 +187,11 @@ class XMLParser(BaseParser): `data` will simply be a string representing the body of the request. `files` will always be `None`. """ - data = {} tree = ET.parse(stream) data = self._xml_convert(tree.getroot()) - + return (data, None) - + def _xml_convert(self, element): """ convert the xml `element` into the corresponding python object @@ -203,19 +202,15 @@ class XMLParser(BaseParser): if len(children) == 0: return self._type_convert(element.text) else: - if element.tag == "resource": + # if the fist child tag is list-item means all children are list-item + if children[0].tag == "list-item": data = [] for child in children: - data.append(self._xml_convert(child)) + data.append(self._xml_convert(child)) else: - if children[0].tag == "resource": - data = [] - for child in children: - data.append(self._xml_convert(child)) - else: - data = {} - for child in children: - data[child.tag] = self._xml_convert(child) + data = {} + for child in children: + data[child.tag] = self._xml_convert(child) return data