Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中为WSDL创建arrayType(使用SUD)?_Python_Xml_Arrays_Wsdl_Suds - Fatal编程技术网

如何在Python中为WSDL创建arrayType(使用SUD)?

如何在Python中为WSDL创建arrayType(使用SUD)?,python,xml,arrays,wsdl,suds,Python,Xml,Arrays,Wsdl,Suds,环境: Python v2.6.2 肥皂水v0.3.7 我使用的WSDL(服务器)具有以下模式子部分(我尝试使用纯文本清晰地编写它)- [第1分节] [第2分节] “userIdentification”(这是一种“简单”类型)没有问题 但是,'itinerayr'是一个'itinerary'数组,我不知道如何使用python创建XML数组 例如,我尝试了几种组合 itinerary0 = self.client.factory.create('itinerary') itinerar

环境:

  • Python v2.6.2
  • 肥皂水v0.3.7
我使用的WSDL(服务器)具有以下模式子部分(我尝试使用纯文本清晰地编写它)-


[第1分节]


[第2分节]


“userIdentification”(这是一种“简单”类型)没有问题

但是,'itinerayr'是一个'itinerary'数组,我不知道如何使用python创建XML数组

例如,我尝试了几种组合

itinerary0 = self.client.factory.create('itinerary')
itineraryArray = self.client.factory.create('itineraryArray')
itineraryArray = [itinerary0]
searchRequest.itineraryArr = itineraryArray
但我所有的试验结果都是相同的服务器错误-

    Server raised fault: 'Cannot use object of type itinerary as array'
    (Fault){
       faultcode = "SOAP-ENV:Server"
       faultstring = "Cannot use object of type itinerary as array"
     }

我相信你要找的是:

itinerary0 = self.client.factory.create('itinerary')
itineraryArray = self.client.factory.create('itineraryArray')
print itineraryArray
itineraryArray.itinerary.append(itinerary0)
我必须自己做;)帮助我找到它的是打印到控制台。这可能会给您以下信息:

 (itineraryArray){
   itinerary[] = <empty>
 }
(行程数组){
行程[]=
}

Cheers,Jacques

对于这种类型的结构,我在数组对象上设置了一个名为“item”的属性,然后将列表成员附加到它。比如:

itineraryArray = self.client.factory.create('itineraryArray')
itineraryArray.item = [itinerary0]

它可以很好地解析和传递,即使对于具有多个级别的复杂调用也是如此。

我使用的是RPC/编码样式WS和包含soap数组的方法。打印请求(其中
request=client.factory.create('request')
)给出:

Jacques(1 request.option.append(option1)1)给出的解决方案不起作用,因为它以错误消息
ArrayFooption实例没有属性append
结束

mcauth给出的解决方案如下所示:

array = client.factory.create('ArrayOfOption')
array.item = [option1,  option2,  option3,  option4,  option5,  option6]
request.option=array
它的工作原理是这样的,因为生成的SOAP消息不显示任何
arrayType
属性:

<option xsi:type="ns3:ArrayOfOption">
它以一条很好的SOAP消息结束:

<option xsi:type="ns0:ArrayOfOption" ns3:arrayType="ns0:Option[6]">

正如服务器端WS预期的那样

array = client.factory.create('ArrayOfOption')
array.item = [option1,  option2,  option3,  option4,  option5,  option6]
request.option=array
<option xsi:type="ns3:ArrayOfOption">
request.option = [option1,  option2,  option3,  option4,  option5,  option6]
<option xsi:type="ns0:ArrayOfOption" ns3:arrayType="ns0:Option[6]">