2016-08-02 2 views
1

나는 파이썬에서 xml.etree을 사용하여 SOAP 응답을 구문 분석합니다 (요청하지 마십시오 ...). 응답에 <Success /> 요소가 포함되어 있습니다.Python XML 요소가 발견되었지만 False로 평가됨 - 파이썬으로 존재를 확인하는 방법?

내가 가서 찾아서 xml.etree.ElementTree.Element 인스턴스를 얻으려면 my_element으로 전화를 걸자.

는하지만 (그렇지 않으면 나는 물론 __bool__()를 확인할 것, 파이썬 2.7을 사용하여) False

  • bool(my_element)
  • my_element.__nonzero__()False false 일에 인스턴스가 평가했다.

나는 my_element.text 비어 있기 때문에 <Success /> 빈 XML 요소이기 때문에 즉, 가정합니다.

비어 있지만 기존 XML 요소의 의미가 다르다고 생각하더라도 비어있는 목록과 딕트가 비슷하게 동작하므로 비법을 사용한다고 가정합니다. 그곳에?

정말 다음과 같은가요?

from xml.etree.ElementTree import Element 
... 
if isinstance(my_element, Element): 
+1

당신 그것을 찾기 위해 사용하고 있습니다. 하지만 하나를 찾지 못하면 None을 반환합니다. 그래서 ... 만약 my_element가 None이 아니면 – clockwatcher

+0

아마도'succeeded = myTree.find ('Success')가 None'이 아닙니다. 이상적으로 응답은 성공 요소가 항상 있고 참 또는 거짓으로 설정되도록 설계되어야합니다. –

답변

1

아니, isinstance는이 Element의 비 존재를 확인하는 방법을 권장하지 않습니다. the docs에서

:

주의 : 어떤 하위 요소와 요소가 False로 테스트합니다. 이 동작은 이후 버전에서 변경됩니다. 대신 특정 len(elem) 또는 elem is None 테스트를 사용하십시오. the source에서

:

warnings.warn(
     "The behavior of this method will change in future versions. " 
     "Use specific 'len(elem)' or 'elem is not None' test instead.", 
     FutureWarning, stacklevel=2 
     ) 

는, 요소의 비 존재 여부를 테스트 같은 것을 수행하려면 : 당신은 방법을 나열하지 않았다

my_element = tree.find('.//Success') 
if my_element is not None: 
    do_something(my_element) 
+0

경고가 표시되지 않았습니다. 자식이 없으면 요소가 false를 반환하는 이유는 무엇입니까? 그 결정을 이해할 수 없습니다. – Johnny

관련 문제