我如何使用Python Zeep的其他XSD



我需要实现一个SPML接口,该接口最终通过HTTP(S)执行SOAP请求。我有一个WSDL,可以归结为:

<wsdl:types>
  <schema targetNamespace="http://soapadapter.something" xmlns="http://www.w3.org/2001/XMLSchema">
   <element name="receiveRequest" type="xsd:anyType"/>
  </schema>
</wsdl:types>
[...]
<wsdl:operation name="receiveRequest">
 <wsdl:input message="impl:receiveRequestRequest" name="receiveRequestRequest"/>
</wsdl:operation>

您可以看到,唯一定义的请求元素是类型" XSD:AnyType"。我有一个单独的XSD,而没有在WSDL中链接,它描述了应如何形成请求。

我想使用Zeep实现肥皂请求以消耗界面。我如何使Zeep知道(本地)XSD文件?

我找到了zeep.xsd.schema.SchemaDocument类,但是在任何地方都没有使用它的示例。有人可以给我一个使用示例,说明如何创建使用WSDL和单独XSD文件的客户端?

是的,您可以以以下方式向Zeep客户端添加其他模式:

import os
from zeep.loader import load_external
from zeep import Client

XSD_SCHEMA_FILE = "/path/to/your.xsd"
CONTAINER_DIR = os.path.dirname(XSD_SCHEMA_FILE)  # Where to load dependencies if any
client = Client('https://path/to/your.wsdl')
schema_doc = load_external(open(XSD_SCHEMA_FILE, "rb"), None)
doc = client.wsdl.types.create_new_document(schema_doc, f"file://{CONTAINER_DIR}")
doc.resolve()

最新更新