У меня есть веб-сервис, который возвращает следующий тип:Почему Python пропускает атрибут в сообщении SOAP?
<xsd:complexType name="TaggerResponse">
<xsd:sequence>
<xsd:element name="msg" type="xsd:string"></xsd:element>
</xsd:sequence>
<xsd:attribute name="status" type="tns:Status"></xsd:attribute>
</xsd:complexType>
Тип содержит один элемент (msg
) и один атрибут (status
).
Для связи с веб-службой я использую библиотеку SOAPpy. Ниже приведен пример результата возвращение веб-службы (SOAP-сообщение):
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:TagResponse>
<parameters status="2">
<msg>text</msg>
</parameters>
</SOAP-ENV:TagResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Python разбирает это сообщение как:
<SOAPpy.Types.structType parameters at 157796908>: {'msg': 'text'}
Как вы можете увидеть атрибут утрачивается. Что делать, чтобы получить значение «status
»?
Я хочу, чтобы значение «status» находилось в сообщении. Метод 'get' не работает для результата:' экземпляр structType не имеет атрибута get''. Однако вы ответили мне подсказкой, и я узнал, что используя 'r._getAttr (« status »)' значение, которое я ищу. Но ... '_getAttr' - внутренняя функция, и я могу ее использовать или есть более подходящий способ получить значение? – czuk
czuk: если класс наследует объект, вы можете использовать встроенный getattr(). Например getattr (результат, «статус», «Нет») вернет значение статуса в результате или «Нет», если оно не было установлено. – jkp
Функция 'getattr' также не существует. Интересно, может ли это быть проблемой с объявлением WSDL. Один из валидаторов говорит, что атрибут пространства имен отсутствует. Я работаю над этим. – czuk