2017-12-22 18 views
0

저는 XML과 ElementTree 클래스로 작업해야합니다.다른 XML 태그의 값을 기반으로 XML 태그 값을 얻으려면 어떻게해야합니까?

<workItem> 
    <stringExtensions> 
    <key>key1</key> 
    <value>value1</value> 
    </stringExtensions> 
    <stringExtensions> 
    <key>key2</key> 
    <value>value2</value> 
    </stringExtensions> 
    <stringExtensions> 
    <key>key3</key> 
    <value>value3</value> 
    </stringExtensions> 
</workItem> 

내가 뭘하고 싶은 것은 값 "값 1"과 "VALUE3"(안 "값 2")를 인쇄 할 수있다 : 나는 다음과 같은 XML 구조를 가지고있다. 이렇게하려면 키 태그 값 "key1"및 "key3"을 필터링하는 방법이 필요합니다. 현재 코드 :

root = ElementTree.fromstring(r.content) 
for entry in root.findall("workItem"): 
    print(entry.find("stringExtensions").find("value").text) 

은 XML 구조의 첫 번째 결과 만 반환하기 때문에 "value1"이 출력됩니다. "key"태그 값과 특정 "value"태그 값을 기반으로 지정할 수 있도록 인쇄 전에 "where"조건을 추가해야합니다.

도움이 될 것입니다.

감사

앤드류

+1

왜 'key2' 규칙을 건너 뛰겠습니까? – RomanPerekhrest

+0

파이썬에서 무언가를 체크하기 위해 언제나 표준'if'를 사용할 수 있습니다. – furas

+0

@RomanPerekhrest key2는 key2 또는 key1 또는 key3이 아니기 때문에 생략해야합니다. 나는 모호한 것처럼 들리지만, key1과 key2의 "value"태그 값에만 관심이 있습니다. – Andrew

답변

0

KEY1 및 KEY3 값 태그 값을 얻기가

최적화 된 솔루션

값 :

... 
root = ElementTree.fromstring(r.content) 
v1 = root.find('./stringExtensions[key="key1"]/value') 
v3 = root.find('./stringExtensions[key="key3"]/value') 

print(v1.text, v3.text, sep='\n') 

출력 :

value1 
value3