Es ist einfach, ein bestimmtes Element vollständig aus einem XML-Dokument mit der lxml-Implementierung der ElementTree-API zu entfernen, aber ich sehe keine einfache Möglichkeit, ein Element durch Text zu ersetzen. Zum Beispiel mit der folgenden Eingabe:
%Vor% ... Sie könnten einfach jedes <r>
Element mit:
Wie würden Sie jedoch jedes Element durch Text ersetzen, um die Ausgabe zu erhalten:
%Vor% Da die ElementTree-API mit den Attributen .text
und .tail
jedes Elements und nicht mit Knoten in der Baumstruktur arbeitet, bedeutet dies, dass Sie abhängig davon, ob es sich um viele Fälle handelt Das Element hat gleichgeordnete Elemente oder nicht, ob das vorhandene Element ein .tail
-Attribut hatte, und so weiter. Habe ich eine einfache Möglichkeit verpasst, dies zu tun?
Ich denke, dass die XSLT-Lösung von unutbu wahrscheinlich der richtige Weg ist, um Ihr Ziel zu erreichen.
Hier ist jedoch ein etwas hacky Weg, um es zu erreichen, indem Sie die Schwänze von <r/>
-Tags ändern und dann etree.strip_elements
verwenden.
Gibt Ihnen:
%Vor% Die Verwendung von strip_elements
hat den Nachteil, dass Sie einige der Elemente <r>
nicht beibehalten können, während Sie andere ersetzen. Es erfordert auch die Existenz einer ElementTree
-Instanz (was möglicherweise nicht der Fall ist). Und zuletzt können Sie damit keine XML-Kommentare oder Verarbeitungsanweisungen ersetzen.
Folgendes sollte Ihre Aufgabe erfüllen:
Tags und Links python xml lxml elementtree