XML-Datei verändern und ein Knoten löschen
Verfasst: Donnerstag 15. November 2007, 10:49
Hi,
ich möchte eine XML-Datei verändern. Das bestehende XML-File sieht so aus:
Nun möchte ich gerne den Knoten Hund löschen und dafür die Kinderknoten an dieser Stelle haben. Also statt Hund sollen dann direkt Dackel und Schäferhund kommen.
Das XML-File sieht dann so aus:
Um das zu realisieren, benutzte ich die Bibliothek „elementtree.ElementTree“. Nun schaffe ich es zwar, die einzelnen Knoten zu durchlaufen. Aber was ich nicht hinbekomme, ist den Knoten Hund durch die entsprechenden Kindknoten zu ersetzten.
Aber ich glaube, mein Code ist auch nicht ganz richtig.
Es wäre nett, wenn mir jemand zeigen könnte, wie ich das hinbekomme.
Danke schon mal im Voraus!!
Albert
ich möchte eine XML-Datei verändern. Das bestehende XML-File sieht so aus:
Code: Alles auswählen
<?xml version="1.0" encoding="ISO-8859-1"?>
<repositoryTree version="0.5">
<printName>Haustier</printName>
<version>2007-02-06</version>
<repositoryFolder>
<printName>Katze</printName>
<repositoryFolder>
<printName>Große Katze</printName>
<repositoryFolder>
<printName>Name</printName>
<repositoryItem name="Sisi" printName="Sisi"/>
<repositoryItem name="Muschi" printName="Muschi"/>
</repositoryFolder>
</repositoryFolder>
</repositoryFolder>
<repositoryFolder>
<printName>Hund</printName>
<repositoryFolder>
<printName>Dackel</printName>
<repositoryItem name="Lutz" printName="Lutz"/>
<repositoryItem name="Bruno" printName="Bruno"/>
</repositoryFolder>
<repositoryFolder>
<printName>Schäferhund</printName>
<repositoryItem name="Heinz" printName="Heinz"/>
</repositoryFolder>
</repositoryFolder>
</repositoryTree>
Das XML-File sieht dann so aus:
Code: Alles auswählen
<?xml version="1.0" encoding="ISO-8859-1"?>
<repositoryTree version="0.5">
<printName>Haustier</printName>
<version>2007-02-06</version>
<repositoryFolder>
<printName>Katze</printName>
<repositoryFolder>
<printName>Große Katze</printName>
<repositoryFolder>
<printName>Name</printName>
<repositoryItem name="Sisi" printName="Sisi"/>
<repositoryItem name="Muschi" printName="Muschi"/>
</repositoryFolder>
</repositoryFolder>
</repositoryFolder>
<repositoryFolder>
<printName>Dackel</printName>
<repositoryItem name="Lutz" printName="Lutz"/>
<repositoryItem name="Bruno" printName="Bruno"/>
</repositoryFolder>
<repositoryFolder>
<printName>Schäferhund</printName>
<repositoryItem name="Heinz" printName="Heinz"/>
</repositoryFolder>
</repositoryTree>
Um das zu realisieren, benutzte ich die Bibliothek „elementtree.ElementTree“. Nun schaffe ich es zwar, die einzelnen Knoten zu durchlaufen. Aber was ich nicht hinbekomme, ist den Knoten Hund durch die entsprechenden Kindknoten zu ersetzten.
Aber ich glaube, mein Code ist auch nicht ganz richtig.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import sys
import elementtree.ElementTree as etree
def walk_tree(node):
print 'node text', node.text
if node.text == 'Hund':
node.remove(node.items())
#pass
print 'Element --->', node.tag
for (name, value) in node.attrib.items():
print 'Attrib --> Name: %s Value: %s \n\n' % (name, value)
children = node.getchildren()
for child in children:
walk_tree(child)
def check(inFileName):
doc = etree.parse(inFileName)
root = doc.getroot()
walk_tree(root)
def main():
args = sys.argv[1:]
if len(args) != 1:
print 'usage infile.xml'
sys.exit(-1)
check(args[0])
if __name__ == '__main__':
main()
Danke schon mal im Voraus!!
Albert