我在互联网上的另一台服务器上有一个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
。
答案 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
希望它有所帮助。