Python / Zeep-具有子元素的可修剪元素

时间:2019-06-03 15:44:01

标签: python xml soap zeep

我正在使用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示例中一样?

0 个答案:

没有答案