使用XML restful服务,输出JSON - for循环问题

时间:2011-04-08 18:32:37

标签: python xml json rest

我在互联网上的另一台服务器上有一个RESTful服务。我发送了一个请求,它返回一个带有一些属性的XML项目。

我还有另一个python函数,它使用本地存储的XML,当我向它提供一个参数时,它将遍历所有元素,并只返回与该参数匹配的XML项,即mysite / search / 123。 我可以使用:

输出那么好
from xml.dom.minidom import parseString
import json
import urllib2
from django.http import HttpResponse
    def index(request, number="1"):
        #file = urllib2.urlopen('myfile.xml')
        file = open('myfile.xml','r')
        data = file.read()
        dom = parseString(data)
        rows = dom.getElementsByTagName("root")[0].getElementsByTagName("subroot")[0].getElementsByTagName("theData")
        for row in rows:
            return  HttpResponse(json.dumps({'name':row.getAttribute("name"),'address': row.getAttribute("address"), 'phone': row.getAttribute("phone")}, sort_keys=True, indent=4))

注意我如何在for循环中使用row,然后使用row.getAttribute()访问属性。如果我只有1个XML项,则不需要循环,因此不需要迭代,因此没有row对象可以使用getAttribute()方法。

我只想检索这一条数据。 anyoe可以帮忙吗?

PS,如果我尝试对这个单一的XML数据进行循环,我会收到一条错误消息: TypeError: Iteration over a non-sequence

1 个答案:

答案 0 :(得分:1)

您需要将生成器作为响应传递给Django:

response_generator = (
    json.dumps(
        {
            'name': row.getAttribute("name"),
            'address': row.getAttribute("address"),
            'phone': row.getAttribute("phone")},
        sort_keys=True,
        indent=4)
    for row in rows)

return HttpResponse(response_generator)

另请参阅:http://docs.djangoproject.com/en/dev/ref/request-response/#passing-iterators

希望它有所帮助。