簡體   English   中英

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 或其他類,有人可以幫助我嗎?我想我需要實例化 any 對象分別持有 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 嵌套類型

當您想使用 python-zeep 工廠構造對象並將其傳遞給具有 Any 類型的字段時使用的第三個選項( 更多詳細信息在這里)。 您可以在這里使用 Any() 作為基本類型,例如

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

下面是等價的表達式:

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

檢查any元素定義中的maxOccurs ,如果未設置(默認情況下等於 1) - 只有列表中的第一個元素將用於 xml 生成

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM