如何在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
[第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]">