尝试在Python中解析SOAP响应

2024-10-01 17:42:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力寻找一种方法来解析从SOAP响应返回的数据。我只熟悉Python(v3.4),但对它比较陌生。我正在使用suds jurko从第三方SOAP服务器获取数据。响应以“ArrayOfXmlNode”的形式返回。我尝试以不同的方式使用ElementTree来解析数据,但是要么没有得到任何信息,要么得到“TypeError:invalid file:(ArrayOfXmlNode)”错误。谷歌搜索如何处理ArrayOfXMLNode类型的响应,却一无所获。在

SOAP响应的第一部分是:

(ArrayOfXmlNode){
   XmlNode[] = 
      (XmlNode){
         Hl = 
            (Hl){
               ID = "22437790"
               Name = "Cameron"
               SpeciesID = "1"
               Sex = "Male"
               PrimaryBreed = "German Shepherd"
               SecondaryBreed = "Mix"
               SN = ""
               Age = "35"
               OnHold = "No"
               Location = "Foster Home"
               BehaviorResult = ""
               Photo = "http://sms.petpoint.com/sms/photos/615/123.jpg"
            }
      },

我尝试过用类似以下代码遍历数据:

^{pr2}$

上面的代码给出了“result[0]”中的整个响应。下面我尝试从数据创建一个列表,但是只得到最后一个节点(节点是从ID到照片的1组信息)。尝试修改此方法会给我任何结果,或者什么都没有,或者只给出最后一个节点。在

所以我试着用简单的代码利用ElementTree来测试它,但是只得到“无效文件”错误。在

import xml.etree.ElementTree as ET

from suds.client import Client
url = 'http://qag.petpoint.com/webservices/AdoptableSearch.asmx?WSDL'
client = Client(url)


result = client.service.adoptableSearchExtended('nunya', 0, 'A', 'All', 'N')

pet_info = ET.parse(result)
print(pet_info)

结果是:

Traceback (most recent call last):
  File "D:\Python\Eclipse Workspace\KivyTest\src\root\nested\Parse.py", line 11, in <module>
    pet_info = ET.parse(result)
  File "D:\Programs\Python34\lib\xml\etree\ElementTree.py", line 1186, in parse
    tree.parse(source, parser)
  File "D:\Programs\Python34\lib\xml\etree\ElementTree.py", line 587, in parse
    source = open(source, "rb")
TypeError: invalid file: (ArrayOfXmlNode){
   XmlNode[] = 
      (XmlNode){
         Hl = 
            (Hl){
               ID = "20840097"
               Name = "Daisy"
               SpeciesID = "1"
               Sex = "Female"
               PrimaryBreed = "Terrier, Pit Bull"
               SecondaryBreed = ""
               SN = ""
               Age = "42"
               OnHold = "No"
               Location = "Dog Adoption"
               BehaviorResult = ""
               Photo = "http://sms.petpoint.com/sms/photos/615/40f428de-c015-4334-9101-89c707383817.jpg"
            }
      },

有人能帮我指出正确的方向吗?在


Tags: 数据代码comidhttp节点parseresult
2条回答

我在使用python3.4和suds jurko解析来自web服务的数据时遇到了类似的问题。我能够使用本文中的代码https://stackoverflow.com/a/34844428/5874347来解决这个问题。我使用了最快的函数将web服务响应转换为字典。从那里你可以分析数据。。。

  1. 将最快的\u object_to_dict函数添加到文件顶部
  2. 拨打您的web服务呼叫
  3. 创建新变量以保存字典响应

    result = client.service.adoptableSearchExtended('nunya', 0, 'A', 'All', 'N') 
    ParsedResponse = fastest_object_to_dict(result)
    
  4. 您的数据现在将以字典的形式出现,您可以根据需要在python端解析字典,或者通过json将其发送回ajax调用,然后使用javascript解析它。 以json的形式返回

    import json
    import sys
    sys.stdout.write("content-type: text/json\r\n\r\n") 
    sys.stdout.write(json.dumps(ParsedReponse))
    

请试试这个:

result[0][0]

这将为您提供数组的第一个元素(ArrayOfXmlNode)。 同样,试试这个:

^{pr2}$

这将为您提供元素result[0][1]的第三个元素。在

希望这能提供另一种解决方案。在

相关问题 更多 >

    热门问题