首页 > 解决方案 > Python zeep - XML 标记缺少字符串类型的类型声明

问题描述

使用zeep时,代码如下:

string_type = client.get_type("xsd:string")
string_expression = string_type("my string value")

结果如下:

<ns1:Value>my string value</ns1:Value>

SOAP 服务器上的序列化程序所期望的实际上是这样的:

<ns1:Value xsi:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">my string value</ns1:Value>

这种差异导致 SOAP 服务器抛出异常:

zeep.exceptions.Fault:格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数http://Services.IPWS/ 时出错。InnerException 消息是“来自命名空间 http://schemas.datacontract.org/的元素值 不能将子内容反序列化为对象。请使用 XmlNode[] 反序列化这种 XML 模式。'。有关更多详细信息,请参阅 InnerException。

可以做些什么来让 zeep 保留 XML 标记中的类型声明?

标签: pythonapisoapzeep

解决方案


我找到了一种让 zeep 生成以下标记的方法,这是 SOAP 服务器所期望的:

value = zeep.xsd.AnyObject(zeep.xsd.String(), "my string value")

这导致:

<ns1:Value xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">my string value</ns1:Value>

推荐阅读