如何在Zeep中为参数value添加xsi:type="xsd:string"标签
解决Zeep调用SOAP接口时为参数添加xsi:type标记的问题
问题描述
调用PersonSearch接口时,需要将value参数用xsi:type="xsd:string"标签包裹,但当前直接传入字符串的方式无法生成该标记,导致SOAP请求不符合接口要求。
解决方案
在Zeep中,可以通过显式指定参数的XSD类型来实现需求,具体有两种可行方式:
方式1:使用zeep.xsd.XSDString直接包装参数
from zeep import xsd # ... 保留原有代码结构 def find_by_login(self, login): # 初始化xsd:string类型对象 string_type = xsd.XSDString() # 用该类型包装login值 typed_value = string_type(login) return self.client.service.PersonSearch( self.session_id, fieldID='0de358e0', relation=0, value=typed_value )
方式2:通过客户端实例获取xsd:string类型包装
# ... 保留原有代码结构 def find_by_login(self, login): # 从客户端对象中获取xsd:string类型 string_type = self.client.get_type('xsd:string') return self.client.service.PersonSearch( self.session_id, fieldID='0de358e0', relation=0, value=string_type(login) )
原理说明
Zeep默认会根据WSDL文档自动推断参数类型,但部分接口要求显式声明xsi:type属性。通过将参数值用对应的XSD类型对象包装,Zeep生成SOAP请求时会自动为该参数添加xsi:type="xsd:string"标记,满足接口的格式要求。
内容的提问来源于stack exchange,提问作者North Legion
相关产品推荐
相关产品推荐

