У меня есть XML-документ, как следующее:Удалить весь узел, используя 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>
, как я могу удалить весь узел «зависимость»?
Я рассмотрел другие вопросы и ответы на stackoverflow, а другой - это аспект пространства имен этого xml, а другие вопросы попросят удалить подэлемент типа «зависимость», в то время как я хочу удалить все зависимые узлы «. Есть ли простой способ использования lxml для удаления всего узла?
Ниже дается объект А «NoneType» не имеет атрибута «удалить» ошибки:
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()
Спасибо! Это то, что я искал. Когда я печатаю текст, закрывающий тег проекта имеет отступы, это проблема? –
@ d.griner, не беспокойтесь. Не имеет значения, если вы хотите записать в файл, просто используйте 'tree.write (« out.xml », encoding =« utf-8 », xml_declaration = True)' –
Не относится к окончательному решению, но isn 't автономный модуль * StringIO * удален с [Python 3] (https://docs.python.org/3/whatsnew/3.0.html)? Не следует импортировать строку: 'from io import StringIO'? – Parfait