2017-12-22 3 views
0

Ich bin fest mit XML und der ElementTree-Klasse arbeiten. Ich habe die folgende XML-Struktur:Wie kann ich einen XML-Tag-Wert basierend auf dem Wert eines anderen XML-Tags erhalten?

<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> 

Was würde ich zu tun in der Lage sein, die Werte „Wert1“ auszudrucken und „value3“ (nicht „Wert2“). Dazu brauche ich eine Möglichkeit, die Key-Tag-Werte "key1" und "key3" zu filtern. Mein aktueller Code:

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

nur drucken „Wert1“, da es das erste Ergebnis in der XML-Struktur zurückgibt. Ich muss vor dem Drucken eine Art "Wo" -Zustand hinzufügen, damit ich auf der Grundlage des "Schlüssel" -Tags einen bestimmten "Wert" -Tag angeben kann.

Jede Hilfe würde sehr geschätzt werden!

Grüße,

Andrew

+1

erklären warum und nach welcher Regel 'key2' sollte übersprungen werden? – RomanPerekhrest

+0

können Sie immer Standard "wenn" etwas in Python überprüfen. – furas

+0

@RomanPerekhrest key2 sollte übersprungen werden, da der Wert key2 und nicht key1 oder key3 ist. Ich weiß, dass das mehrdeutig klingt, aber ich bin nur an den "value" -Tag-Werten von key1 und key2 interessiert. – Andrew

Antwort

0

den Wert Variablenwerte für key1 und key3 Werte

optimierte Lösung zu erhalten:

... 
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') 

Der Ausgang:

value1 
value3 
Verwandte Themen