如何使用 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
由于远程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