Django REST XMLParser() - 无法解析项列表

时间:2016-02-25 15:43:39

标签: python django xml-parsing django-rest-framework

我正在尝试使用Django REST XMLParser解析项目列表。解析器将项目列表视为单个项目。这是XML:

XML = """<?xml version="1.0" encoding="UTF-8"?>
                <root>
                <item>
                    <ID>item_1</ID>
                    <Description>first item</Description>
                </item>
                <item>
                    <ID>item_2</ID>
                    <Description>second item</Description>
                </item>
                </root>
            """

这是解析器:

from django.conf import settings    
settings.configure()
from django.utils.six import BytesIO
from rest_framework_xml.parsers import XMLParser

data_stream = BytesIO(XML)
parsed_data = XMLParser().parse(data_stream)

print parsed_data

返回以下json:

{'item': {'ID': 'item_2', 'Description': 'second item'}}

所以看来XMLParser()正在写入列表项1,并返回列表项2.从上面的代码中,我希望:

[{'item': {'ID': 'item_1', 'Description': 'first item'}}, {'item': {'ID': 'item_2', 'Description': 'second item'}}]

1 个答案:

答案 0 :(得分:0)

从消息来源来看,我认为您需要将<item>更改为<list-item>。标签名称似乎是硬编码的:

https://github.com/jpadilla/django-rest-framework-xml/blob/master/rest_framework_xml/parsers.py#L51

更新以回应您的评论:

DRF完成的xml解析/渲染是序列化的一部分。它可能不是OXM(对象-XML映射)。看一下https://github.com/jpadilla/django-rest-framework-xml/blob/master/rest_framework_xml/renderers.py#L21 - 您应该使用渲染器来创建稍后使用解析器解析的xml。

警告:我没有使用DRF的XML部分,我只是在阅读它的代码。