mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-26 19:43:59 +03:00
recursive xml parsing
This commit is contained in:
parent
27d22cff6c
commit
1664bc7b91
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user