Python zeep / 在请求消息中包含一个 XML 模式

Python zeep / Include an XML Schema in a Request message

我需要集成到一些杂乱的 SOAP 端点以检索数据,并且卡在了生成请求消息的过程中。生成请求消息并与目标应用程序对话适用于大多数功能,但对于某些功能(如前所述:混乱)我需要包含一个 XML 模式作为请求消息中的元素。 XML 模式需要插入到定义为 xs:any 类型的元素中。

使用 python -mzeep 检查 wsdl 时,会显示以下输出(DataSet 是我需要将模式插入其中的元素):

ns1:FillDataSet(asID: xsd:string, asFromCompCode:, ..... , DataSet: {_value_1: ANY})

我没有找到在 Zeep 库中插入模式的方法(原因很明显,但我需要它 :( ),使用 xsd 或其他 类,有人可以帮忙吗我用这个?我想我需要单独实例化持有 XML 模式的任何对象,但不知道如何..

可以传递给 Any 字段的类型:

  1. lxml.etree._Element
  2. builtins.dict
  3. zeep.xsd.valueobjects.AnyObject

使用第一个选项,您可以传递由 lxml 直接解析的任何内容(例如 etree.fromstring)。

{'DataSet': lxml_elem1}

第二个选项应如下所示:{'_value_1': ANY[]},其中 ANY 是 lxml 元素或 AnyObject。它用于 python-zeep nested 类型

当您想使用 python-zeep 工厂构造对象并将其传递给任何类型的字段 (more details here) 时使用第三个选项。您可以在此处使用 Any() 作为基本类型,例如

{'DataSet': AnyObject(Any(), [lxml_elem1, lxml_elem2])

下面是等价的表达式:

{'DataSet': {'_value_1': [lxml_elem1, AnyObj2]}} 

检查 any 元素定义中的 maxOccurs,如果未设置(默认等于 1)- 只有列表中的第一个元素将用于 xml 生成