2009-06-12 11 views
0

FieldRefの下の名前ノードが子ノードではなくFieldRefの属性であるように変更する必要はありますか?値ノードを親ノードの属性に移動させるにはどうすればよいですか?

泡は現在、以下の石鹸を生成します。私は必要なもの

<ns0:query> 
    <ns0:Where> 
    <ns0:Eq> 
     <ns0:FieldRef> 
     <ns0:Name>_ows_ID</ns0:Name> 
     </ns0:FieldRef> 
     <ns0:Value>66</ns0:Value> 
    </ns0:Eq> 
    </ns0:Where> 
</ns0:query> 

はこれです:

<ns0:query> 
    <ns0:Where> 
    <ns0:Eq> 
     <ns0:FieldRef Name="_ows_ID"> 
     </ns0:FieldRef> 
     <ns0:Value>66</ns0:Value> 
    </ns0:Eq> 
    </ns0:Where> 
</ns0:query> 

最初のXML構造は、以下のコードから泡によって生成されます。

(query){ 
    Where = 
     (Where){ 
     Eq = 
      (Eq){ 
       FieldRef = 
        (FieldRef){ 
        Name = "_ows_ID" 
        } 
       Value = "66" 
      } 
     } 
} 

q = c.factory.create('GetListItems.query') 
q['Where']=InstFactory.object('Where') 
q['Where']['Eq']=InstFactory.object('Eq') 
q['Where']['Eq']['FieldRef']=InstFactory.object('FieldRef') 
q['Where']['Eq']['FieldRef'].Name='_ows_ID' 
q['Where']['Eq']['Value']='66' 

print(q)結果ここでは、SOAPリクエスト

c = client.Client(url='https://community.site.edu/_vti_bin/Lists.asmx?WSDL', 
        transport=WindowsHttpAuthenticated(username='domain\user', 
                password='password') 
              ) 
ll= c.service.GetListItems(listName="{BD59F6D9-AB4B-474D-BCC7-E4B4BEA7EB27}", 
          viewName="{407A6AB9-97CF-4E1F-8544-7DD67CEA997B}", 
          query=q 
          ) 
+0

何が問題なのですか?あなたは最初に2番目のように見えることはできませんか? – Jack

+0

@Jack FieldRefの下のNameノードが子ノードではなくFieldRefの属性であるように、変更する必要があるのは何ですか? –

答えて

0
from suds.sax.element import Element 
#create the nodes 
q = Element('query') 
where=Element('Where') 
eq=Element('Eq') 
fieldref=Element('FieldRef') 
fieldref.set('Name', '_ows_ID') 
value=Element('Value') 
value.setText('66') 

#append them 
eq.append(fieldref) 
eq.append(value) 
where.append(eq) 
q.append(where) 

https://fedorahosted.org/suds/wiki/TipsAndTricks

を作成し、WS呼び出しを行うコードですリテラルXML

含め

リテラル(エスケープされていない)オブジェクトのパラメータ値としてXML 属性を含めるには、サックス要素であるオブジェクト 属性のパラメータの値 を設定する必要があります。 マーシャラーは、単に というコンテンツを添付して追加するように設計されています( )。

はたとえば、パラメータとして 次のXMLを渡したい:

<query> <name>Elmer Fudd</name>
<age unit="years">33</age>
<job>Wabbit Hunter</job> </query>

次のようにザ・を行うことができますので、

from suds.sax.element import Element 
query = Element('query') 
name = Element('name').setText('Elmer Fudd') 
age = Element('age').setText('33') 
age.set('units', 'years') 
job = Element('job').setText('Wabbit Hunter') 
query.append(name) 
query.append(age) 
query.append(job) 
client.service.runQuery(query) 
関連する問題