2012-06-05 88 views
1

我在wsdl中有一些複雜類型的問題。 WSDL的這部分:泡沫屬性和值

<xs:element name="Params" nillable="true">     
    <xs:complexType>                  
     <xs:sequence>                  
      <xs:element name="Param" minOccurs="0" maxOccurs="unbounded"> 
       <xs:complexType>        
        <xs:simpleContent>      
         <xs:extension base="xs:string">  
          <xs:attribute name="name" type="xs:string"/> 
         </xs:extension>      
        </xs:simpleContent>      
       </xs:complexType>        
      </xs:element>                 
     </xs:sequence>                  
    </xs:complexType>                  
</xs:element> 

在SOAP-REQ結果字段必須是這樣的:

<ns0:Params> 
    <ns0:Param ns1:name="name1">val1</ns1:Param> 
    <ns0:Param ns1:name="name1">val1</ns1:Param> 
</ns0:Params> 

肥皂水給我下式:

>>> client.factory.create("Payment.Params.Param") 
(Param){ 
    _name = "" 
} 

如果我設置_name,泡沫生成XML :

<ns0:Params> 
    <ns0:Param name="name1"/> 
    <ns0:Param name="name2"/> 
</ns0:Params> 

所以,我可以設置attri bute名稱爲「Param」,但我如何設置價值?

+0

如果你設置'name'(不帶下劃線),你會得到什麼XML? – dusan

回答

2

你有沒有屬性創建「帕拉姆」元素,然後用編組插件添加的name屬性:

# disclaimer: not tested! 
from suds.plugin import MessagePlugin 

class MyPlugin(MessagePlugin): 
    def marshalled(self, context): 
     body = context.envelope.getChild('Body') 
     params = body.getChild('fix_this_path').getChild('Params') 
     foo = params[0] 
     foo.set('name', 'name1') 

client = Client(url, plugins=[MyPlugin()]) 
... 
params = client.factory.create("Payment.Params") 
params.param = "val1" 

更多的信息在這裏:https://fedorahosted.org/suds/wiki/Documentation#MessagePlugin

希望這有助於