我正在使用zeep将旧的php脚本移植到Python。该脚本通过SOAP连接到远程计算机,并定期发送一些数据。 xsd的定义如下:
ns1:UploadInventoryElement(inventoryElement: ns1:InventoryElement)
ns1:InventoryElement(name: xsd:string, fulfillDate: xsd:long, uniqueId: xsd:string, priority: ns1:Priority)
ns1:Priority(name: xsd:string, value: xsd:long)
在php中,我可以看到发送的SOAP信封如下:
<ns1:inventoryElement>
<ns1:name>Item 1</ns1:name>
<ns1:fulfillDate>1559558986</ns1:fulfillDate>
<ns1:uniqueId>UF8009A</ns1:encoding>
<ns1:priority xsi:nil="true"/>
</ns1:priority>
现在,在Python中,我要这样做:
prio_type = document_client.get_type('ns1:priority')
prio_wrap = xsd.Element('priority', prio_type)
prio_value = prio_wrap(zeep.xsd.Nil)
生成的SOAP信封如下所示:
<ns0:inventoryElement>
<ns1:name>Item 1</ns1:name>
<ns2:fulfillDate>1559558986</ns1:fulfillDate>
<ns3:uniqueId>UF8009A</ns1:encoding>
<ns4:priority>
<ns4:name xsi:nil="true"/>
<ns4:value xsi:nil="true" />
</ns1:priority>
但是,服务器拒绝它时会出现非常无用的“空”错误。现在,我认为问题出在优先级元素上,这似乎是两个信封之间的唯一区别。所以我的问题是:有什么方法可以使优先级元素为nil并删除子元素,就像在php示例中一样?