Wie kann man ein Element durch Text in lxml ersetzen?

8

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:

entfernen %Vor%

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?

    
Mark Longair 24.03.2011, 11:11
quelle

3 Antworten

12

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.

%Vor%

Gibt Ihnen:

%Vor%     
MattH 24.03.2011, 14:13
quelle
6

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:

%Vor%     
bernulf 09.05.2012 16:50
quelle
3

ET.XSLT :

%Vor%

ergibt

%Vor%     
unutbu 24.03.2011 12:31
quelle

Tags und Links