Ответ Python не совпадает с soapUI

Когда я получаю доступ к веб-сервису с помощью soapUI, я получаю правильно отформатированный текст. Но когда я использую код Python, я получаю словарь со всеми строками в одном ключе allBusType.

from pysimplesoap.client import SoapClient
url = 'http://180.92.171.93:8080/UPSRTCServices/UPSRTCService?wsdl'
namespace = 'http://service.upsrtc.trimax.com/'
client = SoapClient(wsdl=url, namespace=namespace, trace=True)
print client.GetBusTypes()

Приведенный выше код возвращает следующее:

{'return': {'allBusType': [{'busName': u'AC SLEEPER'}, {'busType': u'ACS'}, {'ischildconcession': u'N'}, {'isseatlayout': u'N'}, {'isseatnumber': u'N'}, {'busName': u'AC-JANRATH'}, {'busType': u'JNR'}, {'ischildconcession': u'N'}, {'isseatlayout': u'Y'}, {'isseatnumber': u'Y'},....

Как показано на следующем экране, soapUI возвращает все автобусные остановки в виде отдельного тега. (И не все остановки в одном теге, как указано выше)

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns3:GetBusTypesResponse xmlns:ns2="com.trimax.upsrtc.xml.jaxb.model" xmlns:ns3="http://service.upsrtc.trimax.com/">
         <return>
            <allBusType>
               <busName>AC SLEEPER</busName>
               <busType>ACS</busType>
               <ischildconcession>N</ischildconcession>
               <isseatlayout>N</isseatlayout>
               <isseatnumber>N</isseatnumber>
            </allBusType>
            <allBusType>
               <busName>AC-JANRATH</busName>
               <busType>JNR</busType>
               <ischildconcession>N</ischildconcession>
               <isseatlayout>Y</isseatlayout>
               <isseatnumber>Y</isseatnumber>
            </allBusType>

Я хотел бы знать, если это проблема с питоном или проблема с сервером.

Для каждой записи есть открывающий и закрывающий тег под названием "allBusType" в ответе soapUI, который отсутствует в ответе python. Выходные данные Python возвращают одну строку для всех записей.

1 ответ

SoapClient возвращает SimpleXmlElement как указано в первой строке документов SoapClient:

Простой, минимальный и функциональный потребитель веб-службы HTTP SOAP, использующий httplib2 для подключения и SimpleXmlElement для обработки запросов / ответов XML.

Поэтому, чтобы просмотреть его как XML, вам нужно вызвать as_xml метод на возвращенный SimpleXmlElement:

as_xml (pretty = False): вернуть XML-представление документа

Следующее должно работать:

from pysimplesoap.client import SoapClient
url = 'http://180.92.171.93:8080/UPSRTCServices/UPSRTCService?wsdl'
namespace = 'http://service.upsrtc.trimax.com/'
client = SoapClient(wsdl=url, namespace=namespace, trace=True)
results = client.GetBusTypes()
print results.as_xml()
Другие вопросы по тегам