SOAP - 使用zeep(python)创建一个元素

时间:2016-09-30 12:51:38

标签: python soap wsdl suds

我要为项目使用SOAP API。 对于特定方法,我要发送复杂类型。

这种复杂类型的声明如下:

<complexType name="specialList">
    <sequence>
        <element name=data" minOccurs="0"maxOccurs="unbounded">
            <complexType>
                <simpleContent>
                    <extension base="string">
                        <attribute name="key" type="string" use="required"/>
                    </extension>
                </simpleContent>
            </complexType>
        </element>
    </sequence>
</complexType>

这是一个例子:

<my_action type="specialList">
    <data key="myKey">MyValue</data>
    <data key="myOtherKey">MyOtherValue</data>
</my_action>

要访问SOAP API,我使用zeep(我试过suds)。 我首先想到的是检索我的“specialList”。

special_list = client.get_type('ns1:specialList')
my_action = special_list(data=[data_1, data_2])

但是我对“数据”类型有疑问。确实没有声明这种类型的“数据”。我不能做client.get_type(“ns1:data”)。

我曾多次尝试创建一个简单的元素,但没有成功。 您是否知道如何创建这种“特殊”数据?

事先,谢谢。

西尔

1 个答案:

答案 0 :(得分:1)

您可以尝试按照文档中的说明使用AnyObject:http://docs.python-zeep.org/en/master/datastructures.html

所以在你的代码中:

来自zeep import xsd

special_list = client.get_type('ns1:specialList')
my_action = xsd.AnyObject(special_list, special_list(data=[data_1, data_2]))