【问题标题】:How to add a new object with suds?如何使用泡沫添加新对象?
【发布时间】:2010-05-29 01:08:47
【问题描述】:

我正在尝试使用 suds,但到目前为止还没有成功。

这应该是我需要实现的原始肥皂消息:

<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:api="http://api.service.apimember.soapservice.com/">
    <soapenv:Header/>
    <soapenv:Body>
        <api:insertOrUpdateMemberByObj>
        <token>t67GFCygjhkjyUy8y9hkjhlkjhuii</token>
             <member>
                 <dynContent>
                     <entry>
                         <key>FIRSTNAME</key>
                         <value>hhhhbbbbb</value>
                     </entry>
                 </dynContent>
                 <email>test@test.com</email>
             </member>
         </api:insertOrUpdateMemberByObj>
     </soapenv:Body>
</soapenv:Envelope>

所以我使用 suds 来创建成员对象:

member = client.factory.create('member')

产生:

(apiMember){
   attributes =
      (attributes){
         entry[] = <empty>
      }
 }

究竟如何附加“条目”?

我试过这个:

member.attributes.entry.append({'key':'FIRSTNAME','value':'test'})

产生这个:

(apiMember){
   attributes =
      (attributes){
         entry[] =
            {
               value = "test"
               key = "FIRSTNAME"
            },
      }
 }

然而,我真正需要的是:

(apiMember){
   attributes =
      (attributes){
         entry[] =
            (entry) {
               value = "test"
               key = "FIRSTNAME"
            },
      }
 }

我如何做到这一点?

【问题讨论】:

    标签: python soap suds


    【解决方案1】:

    您仍然需要使用工厂创建对象:

    member = client.factory.create('member')
    entry = client.factory.create('member.attributes.entry')
    entry.key = 'FIRSTNAME';
    entry.value = 'test';
    member.attributes.entry.append(entry)
    

    【讨论】:

      【解决方案2】:

      在我脑海中浮现(目前所有的泡沫都在起作用)

      member = client.factory.create('member')
      entry = client.factory.create('attributes')
      entry.key="FIRSTNAME"
      entry.value="test"
      member.attributes.entry.append(entry)
      

      这确实取决于定义 SOAP 连接的 WSDL,但attributes 也应该是 WSDL 中定义的结构。

      【讨论】:

        【解决方案3】:

        这就是我尝试创建“条目”时发生的情况:

        >>> member = client.factory.create('member')
        >>> entry = client.factory.create('attributes')
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
          File "build\bdist.win32\egg\suds\client.py", line 231, in create
        suds.TypeNotFound: Type not found: 'attributes'
        >>>
        

        【讨论】:

        • 如果你输入“client.factory.create('member.attributes')”会发生什么?另外,您能否发布定义“成员”类型的 WSDL 部分?
        • 感谢您对这个西蒙的帮助。 client.factory.create('member.attributes.entry') 解决了。
        • 请使用 cmets 或编辑问题,回答答案,而不是重新回答
        【解决方案4】:

        试试这个,类似的事情使用我的 WSDL。

        member.attributes.entry = {'key':'FIRSTNAME','value':'test'}
        

        正如 simon 所说,它确实取决于您的 WSDL。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-10-17
          • 2011-08-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多