如何在响应中忽略tns并更改spyne中的标签名称?

时间:2018-07-19 10:51:50

标签: python python-2.7 spyne

如何从我的回复中省略tns并更改标签名称? 我的回应就是这样

<soap11env:Envelope xmlns:soap11env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="spyne.example">
  <soap11env:Body>
    <tns:FnSchedule_CityResponse>
      <tns:FnSchedule_CityResult>
        <tns:ErrorString></tns:ErrorString>
        <tns:CityName>HYDERABAD</tns:CityName>
        <tns:CityId>1</tns:CityId>
        <tns:ErrId>0</tns:ErrId>
      </tns:FnSchedule_CityResult>
    </tns:FnSchedule_CityResponse>
  </soap11env:Body>
</soap11env:Envelope>

我要删除tns并将“ soap11env”更改为“ soap”。 拥有这些值会导致验证问题。

我在堆栈溢出时提到了这个问题,实现了它,但没有帮助。 Remove the namespace from Spyne response variables

1 个答案:

答案 0 :(得分:0)

要将soap11env更改为soap,只需使用覆盖响应即可

application.interface.nsmap['soap'] = application.interface.nsmap['soap11env']

'tns'或目标名称空间一定不能更改,但是可能会出现一些情况,可能需要更改名称才能完全测试某些内容。

要更改名称空间,

def on_method_return_string(ctx):
ctx.out_string[0] = ctx.out_string[0].replace(b'ns4', b'diffgr')
ctx.out_string[0] = ctx.out_string[0].replace(b'ns5', b'msdata')

YourModelClassName.event_manager.add_listener('method_return_string',                                               on_method_return_string)

我在这里所做的是,将名称空间ns4替换为diffgr,将ns5替换为msdata。 ns4和ns5是我在某些第三方应用程序的响应中拥有的子名称空间。我在为spyne维护的邮件列表中找到了该解决方案。