Ich habe ein XML-Dokument wie folgt aus:Löschen gesamten Knoten mit lxml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>company</groupId>
<artifactId>art-id</artifactId>
<version>RELEASE</version>
</parent>
<properties>
<tomcat.username>admin</tomcat.username>
<tomcat.password>admin</tomcat.password>
</properties>
<dependencies>
<dependency>
<groupId>asdf</groupId>
<artifactId>asdf</artifactId>
<version>[3.8,)</version>
</dependency>
<dependency>
<groupId>asdf</groupId>
<artifactId>asdf</artifactId>
<version>[4.1,)</version>
</dependency>
</dependencies>
wie kann ich den gesamten Knoten „Abhängigkeiten“ löschen?
Ich habe andere Fragen und Antworten auf Stackoverflow untersucht und was ist anders ist der Namespace Aspekt dieser XML, und die anderen Fragen fragen ein Subelement wie "Abhängigkeit" zu löschen, während ich den gesamten Knoten "Abhängigkeiten löschen möchte . " Gibt es eine einfache Möglichkeit, mit lxml den gesamten Knoten zu löschen?
Nachfolgend ergibt eine ‚NoneType‘ Objekt kein Attribut ‚Entfernen‘ Fehler:
from lxml import etree as ET
tree = ET.parse('pom.xml')
namespace = '{http://maven.apache.org/POM/4.0.0}'
root = ET.Element(namespace+'project')
root.find(namespace+'dependencies').remove()
Danke! Das habe ich gesucht. Wenn ich den Text drucke, wird das schließende Projekt-Tag eingerückt, ist das ein Problem? –
@ d.griner, keine Sorgen. Es macht keinen Unterschied, wenn Sie in eine Datei schreiben wollen, verwenden Sie einfach 'tree.write (" out.xml ", encoding =" utf-8 ", xml_declaration = True)' –
Nicht zur endgültigen Lösung, aber isn ist das * StringIO * Standalone-Modul seit [Python 3] (https://docs.python.org/3/whatsnew/3.0.html) entfernt? Sollte die Zeile nicht gelesen werden: 'from io import StringIO'? – Parfait