diff options
| author | Michele Lazzeri | 2012-01-11 19:31:08 +0100 |
|---|---|---|
| committer | Michele Lazzeri | 2012-01-11 19:31:08 +0100 |
| commit | ab83a2faaedd9813887af0382f7199702461f60f (patch) | |
| tree | c31543e208498bb75337b5cc33237bd09eb13b1b /djangorestframework/parsers.py | |
| parent | ad7d921e86198a81a8db2a991111218c798026b8 (diff) | |
| download | django-rest-framework-ab83a2faaedd9813887af0382f7199702461f60f.tar.bz2 | |
recursive xml parsing
Diffstat (limited to 'djangorestframework/parsers.py')
| -rw-r--r-- | djangorestframework/parsers.py | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/djangorestframework/parsers.py b/djangorestframework/parsers.py index c218e5ee..c5eefaec 100644 --- a/djangorestframework/parsers.py +++ b/djangorestframework/parsers.py @@ -189,11 +189,38 @@ class XMLParser(BaseParser): """ data = {} tree = ET.parse(stream) - for child in tree.getroot().getchildren(): - data[child.tag] = self._type_convert(child.text) - + data = self._xml_convert(tree.getroot()) + return (data, None) + def _xml_convert(self, element): + """ + convert the xml `element` into the corresponding python object + + `data` The python object representation of xml `element`. + """ + + children = element.getchildren() + + if len(children) == 0: + return self._type_convert(element.text) + else: + if element.tag == "resource": + data = [] + for child in children: + 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) + + return data + def _type_convert(self, value): """ Converts the value returned by the XMl parse into the equivalent |
