使用Zeep创建含xs:choice的ArrayOfVEHICLE类型元素报错,求助解决方法
如何使用Zeep创建包含xsd:choice的ArrayOfVEHICLE类型元素?
你的问题出在Zeep对xs:choice搭配maxOccurs="unbounded"的结构解析方式上——这个类型本质是一个可重复的选择项列表,而非单个键值对。之前的两种写法都没符合Zeep期望的格式,正确的做法是用列表来传递每个选择项:
正确代码示例
首先获取目标类型:
vehicle_array_type = client.get_type("ns0:ArrayOfVEHICLE")
如果要创建包含单个VEHICLEV2的数组:
# 构造VEHICLEV2的实际字段数据 vehicle_v2_data = { "vehicle_id": "V2-001", "model": "Electric SUV", "production_year": 2024 # 替换为你的实际字段 } # 用列表包裹选择项,每个元素是对应选项的字典 vehicle_array = vehicle_array_type([ {"VEHICLEV2": vehicle_v2_data} ])
如果需要同时包含VEHICLE和VEHICLEV2类型的元素:
vehicle_array = vehicle_array_type([ {"VEHICLE": {"id": "V-001", "model": "Sedan", "year": 2020}}, {"VEHICLEV2": {"id": "V2-002", "model": "Hybrid Truck", "year": 2023, "battery_capacity": 50}} ])
为什么之前的写法会报错?
- 第一种直接传
VEHICLEV2={...}:Zeep期望的是一个列表(对应maxOccurs="unbounded"的可重复选择规则),而非单个关键字参数,所以触发了参数不匹配的错误。 - 第二种用
_value_1={"VEHICLEV2": {...}}:_value_1需要接收的是列表而非单个字典,因为choice允许重复出现,Zeep无法识别单个字典作为合法的序列内容。
内容的提问来源于stack exchange,提问作者Dmitry
相关产品推荐
相关产品推荐

