消费 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))
注意我如何在 for 循环中使用 row
,然后使用 row.getAttribute()
访问属性。如果我只有 1 个 XML 项目,则不需要循环,因此不需要迭代,因此没有 row
对象可以使用 getAttribute()
方法。
我只是想检索这一条数据。有人可以帮忙吗?
PS,如果我尝试对这个单个 XML 数据进行循环,我会收到一条错误消息: 类型错误:对非序列进行迭代
。
I have a RESTful service on another server on the internet. I am sending that a request, which returns a single XML item with a few attributes.
I also have another python function that consumes a locally stored XML, and when I provide a parameter to it, it'll iterate through all the elements, and return only the XML item that matches that parameter, ie mysite/search/123.
I can output that fine by using:
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))
Notice how I use row
in the for loop and then access the attributes using row.getAttribute()
. If I only have 1 XML item, there is no loop need, so no itereating, so no row
object to use the getAttribute()
method on.
I just want to retrieve this one piece of data. Can anyoe help?
PS, if I try do the loop on this single XML data, I get an error saying:TypeError: Iteration over a non-sequence
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要将生成器作为响应传递给 Django:
另请参阅:http://docs.djangoproject.com/en/dev/ref/request-response/#passing-iterators
希望有帮助。
You need to pass a generator to Django as a response:
See also: http://docs.djangoproject.com/en/dev/ref/request-response/#passing-iterators
Hope it helps.