2016-04-20 11 views
0

Ich habe den folgenden Code gespeichert werden:XML Attributmodifikation nicht

def incrCount(root): 
    root.attrib['count'] = int(root.attrib['count']) + 1 
    # root.set('count', int(root.attrib['count']) + 1) 

root = getXMLRoot('test.xml') 
incrCount(root) 
print root.attrib['count'] 

, wenn ich es laufen, der richtige Wert gedruckt wird, aber diese Änderung ist nie am Ende der Ausführung in der Datei sichtbar. Ich habe beide Methoden oben ohne Erfolg versucht. Kann jemand darauf hinweisen, wo ich den Fehler gemacht habe?

+1

Die Änderungen werden nur im Speicher gemacht. Wenn Sie möchten, dass sie in eine Datei gehen, müssen Sie sie selbst schreiben. Verwenden Sie [tostring] (https://docs.python.org/3.5/library/xml.etree.elementtree.html#xml.etree.ElementTree.tostring) und schreiben Sie das Ergebnis in eine Datei, die mit dem Modus "wb" geöffnet wurde . – bbayles

+0

@bbayles Ich dachte, ich könnte die Datei direkt ändern. Aber ich hatte gehofft, etwas im ET-Modul zu finden. Naja. Wann ist die Methode immer sinnvoll? – mjr

+0

Die Datei wird von der Festplatte als Textfluss gelesen und dann in Knoten im Speicher geparst. Wenn es (explizit) gespeichert wird, geschieht das Umgekehrte. Berücksichtigen Sie den Overhead, wenn Sie den Rest des Texts mischen, um ein Attribut in einer großen Datei hinzuzufügen oder zu ändern. – Mike

Antwort

1

Wie in der Dokumentation (19.7.1.4. Modifying an XML File) veranschaulicht, müssen Sie nach der Durchführung aller Änderungen in die Datei zurückschreiben. Unter der Annahme, dass root Referenzen Instanz ElementTree, können Sie ElementTree.write() Methode für diesen Zweck verwenden:

..... 
root = getXMLRoot('test.xml') 
incrCount(root) 
print root.attrib['count'] 
root.write('test.xml') 
+0

Perfekt! Vielen Dank – mjr