как опустить tns из ответа и изменить имя тега в 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» на «мыло». Наличие этих значений вызывает проблемы с проверкой.

я сослался на этот вопрос о переполнении стека, реализовал его, но не помог. Удалить пространство имен из переменных ответа Spyne


person Rohitash Mathur    schedule 19.07.2018    source источник


Ответы (1)


Чтобы изменить 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.

person Rohitash Mathur    schedule 08.08.2018
comment
пожалуйста, следуйте stackoverflow.com/a/31001419/1200441, чтобы опустить tns и soap11env - person Jahanzaib; 24.04.2020