如何使用 Zeep 库应用所需的命名空间格式?

How can I apply required namespace formatting with Zeep library?

由于远程WSDL服务,zeep库生成的请求被认为是无效的。因此,产品图片未加载。但是,它将做的是使用数组中的 url。

这里的问题是,zeep库产生的XML输出如下:

<ns1:Images>
    <ns2:string xmlns:ns2="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        https://www.example.com/variant_image.png
    </ns2:string>
    <ns3:string xmlns:ns3="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        https://www.example.com/variant_image2.png
    </ns3:string>
    <ns4:string xmlns:ns4="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        https://www.example.com/variant_image3.png
    </ns4:string>
</ns1:Images>

这是我用来生成这个的方法 XML:

from zeep import Client
from zeep.transports import Transport

transport = Transport()
client = Client(service_url, 
                transport=transport,
                strict=False)


images = client.get_type("ns4:ArrayOfstring")()
local_images = [
    "https://www.example.com/variant_image.png",
    "https://www.example.com/variant_image2.png",
    "https://www.example.com/variant_image3.png",
]

for image in local_images:
    images["string"].append(image)

然而,WSDL 服务请求接收图像的 XML 必须如下所示:

<s:Images xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <a:string>https://www.example.com/variant_image.png</ns2:string>
    <a:string>https://www.example.com/variant_image2.png</ns2:string>
    <a:string>https://www.example.com/variant_image3.png</ns2:string>
</s:Images>

正如您在上面的 XML 中看到的,项目名称space 在数组定义中声明并且所有项目都使用相同的名称space。数组的名称 space 也与生成的名称不同。

在这种情况下,我需要在使用 zeep 发出请求时生成的 XML 部分中按照要求设置名称space 说明符并具有相同的名称space用于每个项目。

有没有可能做到这一点?

结果是像这样追加字符串:

images["string"].append(image)

最后是这个 XML:

<ns1:Images>
    <ns2:string xmlns:ns2="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        https://www.example.com/variant_image.png
    </ns2:string>
    <ns3:string xmlns:ns3="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        https://www.example.com/variant_image2.png
    </ns3:string>
    <ns4:string xmlns:ns4="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        https://www.example.com/variant_image3.png
    </ns4:string>
</ns1:Images>

我想到的解决方案是将字符串列表直接放入 ArrayOfstring,而不是一个一个地附加到:

image_urls = list()
for image in local_images:
    image_urls.append(image)
images["string"] = image_urls