如何使用Zeep创建同时带属性和字符串值的自定义SOAP头xsd.Element
实现方法
你目前的写法错误是因为直接在ComplexType下混入字符串节点和属性不符合XSD的类型定义规则,这种包含文本值+属性、无其他子节点的XML元素,需要用xsd.SimpleContent对基础字符串类型做扩展,再追加属性定义。
正确实现代码如下:
from zeep import xsd # 定义带属性的字符串简单内容类型 password_type = xsd.ComplexType( xsd.SimpleContent( [ xsd.Extension( xsd.String(), [ xsd.Attribute('Type', xsd.String()) ] ) ] ) ) # 定义Password元素,绑定类型,可根据实际需求调整命名空间 password_header = xsd.Element( '{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Password', password_type ) # 实例化生成目标节点 password_value = password_header(_value_='StringPasswordValue', Type='StringAttribute')
相关说明:
- 实例化时文本值必须通过
_value_参数传递,这是Zeep对简单内容扩展类型的固定传参规则 - 无需调用wsse内置的UsernameToken结构,自定义元素即可满足需求
- 生成的XML结构完全匹配需求的
<wsse:Password Type="StringAttribute">StringPasswordValue</wsse:Password>格式
内容的提问来源于stack exchange,提问作者Halvor Holsten Strand
相关产品推荐
相关产品推荐

