Bin noch auf zwei weitere, kleine Probleme gestoßen, die mir grad Kopfzerbrechen bereiten. Wie ich festgestellt habe, kann meine XML pro Datensatz mehrere Daten enthalten, also so:
Code: Alles auswählen
from lxml import etree as ET
root = ET.fromstring("""<Gesamt zeit = "heute">
<test name = "Test1">
<datensatz ID = "1">
<daten
Vorname="otto"
Nachname = "waldmann"/>
</datensatz>
<datensatz ID = "4">
<daten
Vorname="hans"
Nachname = "stachelmann"/>
<daten
Vorname="hans"
Nachname = "mustermann"/>
</datensatz>
</test>
<test name = "Test2">
</test>
<test name = "Test3">
</test>
</Gesamt> """)
root.xpath('/Gesamt[@zeit="heute"]/test[@name="Test1"]/datensatz[@ID="4"]/daten')[0].attrib['Vorname'] = 'Manni'
print ET.tostring(root)
Problem1: Dieses [0] am Ende der XPath Anweisung bedeutet ja, dass er den Vornamen von "hans stachelmann" in "Manni" ändern würde, also das 0-te Element. Nun ist es aber so, dass mir nicht die Nummer bekannt ist, sondern eben alle Attribute.
Also ich weis, ich möchte den Vornamen "hans" ändern, welcher den Nachnamen "stachelmann" besitzt. Kann man diese Bedingung irgendwie einbauen und stattdessen quasi auf die Nummerierung verzichten?
Problem2: Ich hab die ganzen Informationen natürlich in Variablen stehen. Also zum Beispiel bei
steht das "heute" in der Variable
Zeitpunkt.
Wenn ich nun aber
schreibe, dann bekomm ich einen Fehler. List index out of range.
Wie ist die Syntax, um Variablen anstatt direkt Strings nehmen zu können?
Grüße