2009-07-27 2 views
0

파이썬이 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"의 가치를 얻으려면 어떻게해야합니까?

답변

1

게시 한 응답 예 (WS 요청에서 실제 XML로 돌아 오는)에는 찾고있는 값이 없습니다! 이것이 SOAPpy가 당신에게 그것을 돌려 줄 수없는 이유입니다.

이 코드를 만드는 경우라면 값이 반환되는 경우에 일관된 동작을하고 있지 않을 때 그 값 얻기 위해 dictget() 방법을 사용해보십시오 : 다음

attribute_value = result.get("attribute", None) 

을 결과가 없으면 테스트 할 수 있습니다. 다음과 같이 할 수도 있습니다.

if not "attribute" in result: 
    ...handle case where there is no attribute value... 
+0

메시지에있는 "status"값을 원합니다. 'get' 메쏘드는 그 결과로는 작동하지 않습니다 :'structType 인스턴스에는 'get'' 속성이 없습니다. 그러나 답은 단서를 주었고,'r._getAttr ("status")'를 사용하여 찾고있는 값을 찾았습니다. 그러나, ...'_getAttr'은 내부 함수이므로 사용할 수 있습니까? 아니면 값을 가져 오는 더 적절한 방법이 있습니까? – czuk

+1

czuk : 클래스가 객체에서 상속하는 경우 getattr() 내장 함수를 사용할 수 있습니다. 예를 들어, getattr (result, "status", None)은 결과의 status 값을 반환하거나 설정되지 않은 경우 None을 반환합니다. – jkp

+0

함수'getattr'도 존재하지 않습니다. WSDL 선언에 문제가 있는지 궁금합니다. 유효성 검사기 중 하나는 네임 스페이스 특성이 없다고 말합니다. 나는 그것에 대해 연구 중이다. – czuk