Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
@nathan6: child.get ist eine Methode, wie soll man denn die aus irgendeiner Liste löschen können? Zudem mußt Du das Element aus dem Elternelement löschen, bei Dir also root2:
<Element 'root2' at 0x1633ed0>
Traceback (most recent call last):
File "test.py", line 174, in <module>
func()
File "test.py", line 117, in mod
parent.remove(child)
File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 337, in remove
self._children.remove(element)
ValueError: list.remove(x): x not in list
None
Zuletzt geändert von nathan6 am Sonntag 20. März 2016, 13:55, insgesamt 1-mal geändert.
<Element 'root2' at 0x2428ed0>
<Element 'root2' at 0x242b690>
<Element 'root2' at 0x242b790>
<Element 'root2' at 0x242bc90>
<Element 'root2' at 0x242be10>
Traceback (most recent call last):
File "test.py", line 170, in <module>
func()
File "test.py", line 113, in mod
parent.remove(child)
File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 337, in remove
self._children.remove(element)
ValueError: list.remove(x): x not in list
None
@nathan6: Du entfernst da Kindelemente aus einem Element während Du über diese Kindelemente iterierst, das funktioniert so nicht. Damit sägst Du an dem Ast auf dem Du sitzt. Du musst vorher eine Liste aller (zu löschenden) Kindelemente erstellen über die Du dann iterieren kannst um sie zu löschen. Also benutz dafür keine Methode die ”lazy” über die Elemente iteriert und sucht, sondern eine die Dir schon eine Liste mit allen Treffern liefert.
Also ich hab jetzt eine Liste mit allen zu löschenden Kinderelementen(root2) erstellt. Aber egal was ich versuche ich bekomm es nicht gelöscht. Das XML ist wirklich sehr verwirrend für mich.
@nathan6: Was soll denn ``for child in parent.iter(mylist):`` bewirken? Ich würde auch nicht unbedingt mit ``/..`` im XPath-Ausdruck arbeiten sondern mir erst einmal das Elternelement suchen aus dem Du die Kindelemente löschen möchtest. Diese zweite Aufgabe ist ja schliesslich etwas anders als das erste. Hier sind die zu löschenden Elemente alle im gleichen Elternelement.
XML ist auch in PHP nicht einfacher. Es ist vielleicht einfacher sich für PHP eine unsaubere Lösung zu ergooglen die man dann verwenden kann ohne sie zu verstehen. Dadurch wird die Materie an sich aber nicht einfacher.
@nathan6: Ähm, und warum gehst Du in Python nicht genau so vor wie in PHP? Vielleicht weil Du nicht wirklich verstanden hast was Du da machst? Weder in PHP noch in Python‽
Ähm wer stellt den nun die Fragen an wen ?
Ich bin nunmal hier weil ich nicht weiß wie ich das in Python umsetzen kann, weil ich keine Erfahrung mit Python habe, bis jetzt.
@nathan6: ein Weg, etwas zu lernen, ist es sich selbst Gedanken zu machen. Wenn Du schon eine Lösung in PHP hast, warum setzt Du sie dann nicht so auch mit Python um? Die Schwierigkeit bei Deiner ersten Frage war ja, dass nicht klar war, dass die Struktur des XML immer gleich aussieht, so dass man tatsächlich vom Kind-Element zum Eltern-Element zurückgehen muß, wobei ElementTree kein parent kennt. Daher der Umweg. In PHP gehst Du aber den direkten Weg, von root1 nach root2. Das kannst Du natürlich so auch mit Python machen. findall und remove kennst Du ja schon, und das ist ja auch ausreichend.
Sirius3 hat geschrieben:@nathan6: ein Weg, etwas zu lernen, ist es sich selbst Gedanken zu machen. Wenn Du schon eine Lösung in PHP hast, warum setzt Du sie dann nicht so auch mit Python um? Die Schwierigkeit bei Deiner ersten Frage war ja, dass nicht klar war, dass die Struktur des XML immer gleich aussieht, so dass man tatsächlich vom Kind-Element zum Eltern-Element zurückgehen muß, wobei ElementTree kein parent kennt. Daher der Umweg. In PHP gehst Du aber den direkten Weg, von root1 nach root2. Das kannst Du natürlich so auch mit Python machen. findall und remove kennst Du ja schon, und das ist ja auch ausreichend.
Danke, deine Antwort hat mir tatsächlich weitergeholfen