2009-06-12 32 views
0

我需要更改什麼,以便FieldRef下的Name節點是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結構。

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)結果

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

這裏,使WS調用創建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

所以這個問題到底是什麼?你不能第一個看起來像第二個? – Jack 2009-06-12 14:47:11

回答

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

代碼

包括文字XML

要包含文字(不轉義)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) 
相關問題