消耗XML RESTful服务,输出为JSON - for循环问题
我在互联网上的另一台服务器上有一个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))
注意我在循环中使用了row
,然后通过row.getAttribute()
来访问属性。如果我只有一个XML项,就不需要循环,所以也就没有row
对象可以用来调用getAttribute()
方法。
我只是想获取这一条数据。有人能帮我吗?
另外,如果我尝试在这个单一的XML数据上进行循环,我会收到一个错误,提示:TypeError: Iteration over a non-sequence
。
1 个回答
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
希望这对你有帮助。