Использование XML-сервиса для отдыха, вывод в JSON - для проблемы цикла - PullRequest
0 голосов
/ 08 апреля 2011

У меня есть служба 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 в цикле for, а затем обращаюсь к атрибутам, используя row.getAttribute(). Если у меня есть только 1 элемент XML, в цикле нет необходимости, поэтому нет итерации, поэтому нет объекта row для использования метода getAttribute().

Я просто хочу получить этот фрагмент данных. Может ли кто-нибудь помочь?

PS, если я попытаюсь выполнить цикл для этих отдельных данных XML, я получу сообщение об ошибке: TypeError: Iteration over a non-sequence.

1 Ответ

1 голос
/ 09 апреля 2011

Вам нужно передать генератор Джанго в ответ:

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...