消费 XML Restful 服务,以 JSON 输出 - for 循环问题

发布于 2024-10-31 03:24:44 字数 1091 浏览 2 评论 0原文

我在互联网上的另一台服务器上有 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

手长情犹 2024-11-07 03:24:44

您需要将生成器作为响应传递给 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

希望有帮助。

You need to pass a generator to Django as a response:

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)

See also: http://docs.djangoproject.com/en/dev/ref/request-response/#passing-iterators

Hope it helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文