【问题标题】:How do I get a value node moved up to be an attribute of its parent node?如何让值节点向上移动成为其父节点的属性?
【发布时间】:2009-06-12 14:27:37
【问题描述】:

我需要更改什么,以便 FieldRef 下的 Name 节点是 FieldRef 的属性,而不是子节点?

Suds 当前生成以下肥皂:

<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结构是由suds从下面的代码生成的。

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"
            }
      }
 }

这是创建soap请求的WS调用的代码

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
                             )

【问题讨论】:

  • 那么问题到底是什么?你不能让第一个看起来像第二个吗?
  • @Jack 我需要更改什么,以便 FieldRef 下的 Name 节点是 FieldRef 的属性,而不是子节点?

标签: python soap suds


【解决方案1】:
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 作为对象的参数值 属性,需要设置值 对象的参数 属性为萨克斯元素。这 marshaller 旨在简单地 附加和附加内容 已经是 XML。

例如,您想通过 以下 XML 作为参数:

&lt;query&gt; &lt;name&gt;Elmer Fudd&lt;/name&gt;
&lt;age unit="years"&gt;33&lt;/age&gt;
&lt;job&gt;Wabbit Hunter&lt;/job&gt; &lt;/query&gt;

可以这样做:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-01
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多