Seite 1 von 1

Verfasst: Donnerstag 10. Juli 2008, 12:27
von BlackJack
Warum die bemängelte Zeile *nie* funktioniert, hat ProgChild in seinem letzten Beitrag erklärt. Ein Knoten kann nicht sein eigenes Kind sein.

Ich weiss auch nicht, ob Du bei DOM und SAX so besonders viel Hilfe hier bekommen wirst. Das benutzt eigentlich keiner, der nicht gerade masochistisch veranlagt ist. ;-)

Mit `ElementTree` könnte das so aussehen:

Code: Alles auswählen

from xml.etree import ElementTree as etree

def main():
    new_contents = [u'Gemüse', 'rrr']
    
    doc = etree.parse('test.xml')
    value_nodes = doc.findall('Variables/Tag/Value')
    assert len(new_contents) == len(value_nodes)
    for value_node, new_content in zip(value_nodes, new_contents):
        value_node.text = new_content
    
    etree.dump(doc)

Verfasst: Donnerstag 10. Juli 2008, 15:37
von Pü-Ton
Hi BlackJack,

wow, das ist ja der Hammer, klappt super. Werd es dann wohl mit Elementtree machen...

Vielen Dank :D :D :D :D

Verfasst: Donnerstag 17. Juli 2008, 14:24
von Pü-Ton
Hi BlackJack,

ich beziehe mich nochmal auf Dein Beispiel von eben.
Wenn ich das so mache, bekomm ich ja wunderschön das gesamte XML-File in meiner Ausgabe von Scite angezeigt.
Aber das ist jetzt nur eine "Vorschau", oder?
Das bestehende, ausgelesene/geparste XML wurde damit ja nicht übrschrieben, oder?
Aber genau das will ich noch machen...

"echtes" XML-File löschen und mit dem bearbeiteten überschrieben.

Kannst Du mir da auf die Sprünge helfen?

Code: Alles auswählen

etree.dump(doc)
bewirkt doch die Anzeige, oder?

Muss überhaupt gelöscht werden, oder kann man mit elementtree auch einfach überschreiben und speichern?

Danke schonmal

Verfasst: Donnerstag 17. Juli 2008, 14:30
von BlackJack
`ElementTree`-Exemplare haben eine `write()`-Methode.