You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:00:03