在某些情况下,使zeep使用默认名称空间而不是命名名称空间

时间:2019-05-07 12:46:20

标签: python xml soap zeep

我正在使用Zeep将请求发送到供应商提供的SOAP 1.1 API,该API建立在WCF上,但似乎有一些特殊之处。

Zeep当前正在生成这样的XML

  <soap-env:Body>
    <ns0:GetDataServers xmlns:ns0="AIR.Services.DataSourceManagementService.Api">
      <ns0:request>
        <ns1:BusinessUnitSid xmlns:ns1="AIR.Services.Common.Api">1</ns1:BusinessUnitSid>
        <ns2:LicenseUid xmlns:ns2="AIR.Services.Common.Api">00000000-0000-0000-0000-000000000000</ns2:LicenseUid>
        <ns3:RequestUid xmlns:ns3="AIR.Services.Common.Api">00000000-0000-0000-0000-000000000000</ns3:RequestUid>
        <ns4:SqlInstanceSid xmlns:ns4="AIR.Services.Common.Api">1</ns4:SqlInstanceSid>
      </ns0:request>
    </ns0:GetDataServers>
  </soap-env:Body>

但是由于错误Error in line 1 position 74. Expecting element 'GetDataServersRequest' from namespace 'AIR.Services.DataSourceManagement.Api'.. Encountered 'Element' with name 'GetDataServersRequest', namespace ''.

而被拒绝

但是,如果我将ns0设置为默认名称空间,那么它将起作用

<soap-env:Body>
    <GetDataServers xmlns="AIR.Services.DataSourceManagementService.Api">
      <request>
        <ns1:BusinessUnitSid xmlns:ns1="AIR.Services.Common.Api">1</ns1:BusinessUnitSid>
        <ns2:LicenseUid xmlns:ns2="AIR.Services.Common.Api">00000000-0000-0000-0000-000000000000</ns2:LicenseUid>
        <ns3:RequestUid xmlns:ns3="AIR.Services.Common.Api">00000000-0000-0000-0000-000000000000</ns3:RequestUid>
        <ns4:SqlInstanceSid xmlns:ns4="AIR.Services.Common.Api">1</ns4:SqlInstanceSid>
      </request>
    </GetDataServers>
  </soap-env:Body>

有没有办法使Zeep在此位置使用普通的xmlns默认名称空间?

1 个答案:

答案 0 :(得分:0)

您可以通过

实现
client.set_ns_prefix(None, namespace_name)