Python中如何定义类匹配SOAP请求返回的未知Person对象
问题1:如何在代码中定义与该返回对象完全匹配的类
你之前自定义的类缺少打印适配逻辑,和SOAP返回的结构映射也没有做对齐,推荐使用Python 3.7及以上版本内置的dataclasses实现,代码示例如下:
from dataclasses import dataclass @dataclass class PersonClass: # 字段名和返回的键名、SOAP响应的标签名完全保持一致 ID: str = "" FIRST_NAME: str = "" LAST_NAME: str = "" MIDDLE_NAME: str = "" TAB_NUM: str = "" ORG_ID: str = "" # 可选:配置打印格式,和你拿到的打印输出保持一致 def __repr__(self): return str({ "ID": self.ID, "FIRST_NAME": self.FIRST_NAME, "LAST_NAME": self.LAST_NAME, "MIDDLE_NAME": self.MIDDLE_NAME, "TAB_NUM": self.TAB_NUM, "ORG_ID": self.ORG_ID })
如果需要从SOAP响应的XML数据手动初始化类实例,只需要将XML节点的内容依次赋值给对应字段即可。
问题2:是否有对应的Python模块可以处理这类场景
有专门处理SOAP请求的第三方模块zeep,不需要你手动定义适配类、手动解析XML,模块会自动根据服务的WSDL文件生成对应的对象结构,直接调用接口就能拿到结构化的Person对象。使用前先执行pip install zeep安装依赖,使用示例如下:
from zeep import Client # 替换为你的服务WSDL地址,通常为SOAP服务地址后缀加?wsdl wsdl_url = "http://192.168.56.3/IntegrationService/IntegrationService.asmx?wsdl" client = Client(wsdl=wsdl_url) # 直接调用接口方法,传入对应参数 result = client.service.FindPeople( sessionID="你的会话ID", lastname="搜索的姓氏", firstname="搜索的名字", middlename="搜索的中间名" ) # 直接访问返回的Person对象属性即可 for person in result.FindPeopleResult.Person: print(person.ID) print(person.FIRST_NAME) print(person.ORG_ID)
如果不想引入第三方依赖,也可以用Python内置的xml.etree.ElementTree模块解析SOAP响应的XML内容,手动给你定义的PersonClass字段赋值即可,只是开发效率远低于直接使用zeep模块。
内容的提问来源于stack exchange,提问作者A P
相关产品推荐
相关产品推荐

