Du solltest nicht verzweifelt etwas versuchen, das nennt man "programming by accident", sondern verstehen was Du da tust.MoR4euZ hat geschrieben:ok hast recht root.ids war nur ein verzweifelter versuch von mir
Du bindest den Namen `xmldoc` an den Dateinamen. Dann öffnest Du die Datei zum lesen und liest sie komplett ein. Den Dateiinhalt parst Du mit `XMLID()` und erhältst das Wurzelelement, mit allem was da dran hängt, und ein Dictionary das ID-Namen direkt auf die entsprechenden `Element`-Objekte abbildet.Code: Alles auswählen
#!/usr/bin/env python # -*- coding: utf-8 -*- from xml.etree import ElementTree as etree xmldoc = 'process.xml' new_runtime = 11.111111111 f = file(xmldoc, 'r') s = f.read() root, id = etree.XMLID(s) doc = etree.ElementTree(file=xmldoc) doc.getroot() rtime = id['1'].getchildren()[3] rtime.clear() rtime.text = new_runtime doc.write(file=xmldoc) f.close()
Dann erzeugst Du mit `ElementTree()` *noch* einmal eine Objekthierarchie von `Element`-Objekten und bindest diese an den Namen `doc`. Davon ermittelst Du das Wurzelelement und machst nichts damit. Aber auch so wirklich gar nichts, nicht mal an einen Namen binden.
Dann holst Du Dir via ID ein `Element`-Objekt aus dem *ersten* Baum den Du eingelesen hast, löscht dessen Inhalt und setzt den Text auf die neue Laufzeit.
Und zum Schluss schreibst Du den Baum, den Du *nicht* verändert hast, wieder in eine Datei zurück und schliesst die Datei die die ganze Zeit über noch zum Lesen geöffnet war. Dabei kann nichts passieren wenn Du danach nicht wieder versuchst was zu lesen, aber es ist mindestens unsauber die so lange ohne Grund offen zu halten.