2012-01-16 6 views
2

У меня возникла проблема с поиском правильного запроса на мыло с использованием SUDS. Для определенного XML-элемента, мне нужно указать атрибут с использованием пространства имен:Python SUDS - Невозможно создать правильный запрос SOAP

ns0:type 

оригинальная спецификация:

(ParameterType){ 
    Name = 
     (NameType){ 
     value = None 
     _required = "" 
     } 
    Description = None 
    Value = 
     (ValueType){ 
     Text = None 
     XmlDoc = None 
     _type = "" 
     } 
} 

Так я получаю этот XML:

<ns0:parameters> 
    <ns0:Input> 
     <ns0:Parameter> 
      <ns0:Name required="true">Param</ns0:Name> 
      <ns0:Value type="xs:Text"> 
      <ns0:Text>1</ns0:Text> 
      </ns0:Value> 
     </ns0:Parameter> 
    </ns0:Input> 
</ns0:parameters> 

Что Мне нужно его получить:

<ns0:parameters> 
    <ns0:Input> 
     <ns0:Parameter> 
      <ns0:Name required="true">Param</ns0:Name> 
      <ns0:Value ns0:type="xs:Text"> 
      <ns0:Text>1</ns0:Text> 
      </ns0:Value> 
     </ns0:Parameter> 
    </ns0:Input> 
</ns0:parameters> 

Я пробовал использовать плагины, но я думаю, что ему не нравится символ «:». Вот код:

class MyPlugin(MessagePlugin): 
    def marshalled(self, context): 
     foo = context.envelope.getChild('Body').getChild('ns0:executeProcess').getChild('ns0:parameters').getChild('ns0:Input').getChild('ns0:Parameter').getChild('ns0:Value') 
     foo.attributes.append(Attribute("ns0:type", "Text")) 

Любые идеи о том, как я могу это достичь? Заранее спасибо.

Подробнее: пенообразование 0.4.1 - питон 2,4

ответ

3

Я нашел надлежащего использования плагина:

class MyPlugin(MessagePlugin): 
def marshalled(self, context): 
    inputElement = context.envelope.getChild('Body').getChild('ns0:executeProcess').getChild('ns0:parameters').getChild('ns0:Input') 
    parametrosElements = inputElement.getChildren() 
    for i in range(len(parametrosElements)): 
     valueElement = parametrosElements[i].getChild('ns0:Value') 
     valueElement.attributes.append(Attribute("ns0:type", "Text")) 
Смежные вопросы