1

soapUI を使用して Web サービスにアクセスすると、正しい形式のテキストが表示されます。しかし、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>

これがpythonの問題なのかサーバーの問題なのか知りたいです。

エントリごとに、python 応答にない soapUI 応答に「 allBusType 」と呼ばれる開始タグと終了タグがあります。Python 出力は、すべてのエントリに対して単一の行を返しています。

4

1 に答える 1

1

SoapClientSimpleXmlElementドキュメントの最初の行に記載されているように、 SoapClientは a を返します。

接続に httplib2 を使用し、XML 要求/応答操作に SimpleXmlElement を使用する、シンプルで最小限かつ機能的な HTTP SOAP Web サービス コンシューマー。

as_xmlしたがって、それを 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()
于 2015-04-09T12:14:18.693 に答える