现在尝试了几种不同的库,并认为它们很接近,但无法弄清楚这个问题。
我有一个XML文件,其中包含一些要删除的嵌套表。这些是XML层次结构中的几个层次。
到目前为止,我已经尝试过了...
import xml.etree.ElementTree as ET
import os
tree = ET.parse('/Users/me/file.xml')
root = tree.getroot()
for sect1 in root.findall('section1'):
for sect2 in sect1.iter() :
if sect2.tag == 'table':
sect1.remove(sect2)
但是我得到了错误:
ValueError: list.remove(x): x not in list
我可以使用以下代码从层次结构的顶层成功删除文档的各个部分:
import xml.etree.ElementTree as ET
import os
tree = ET.parse('/Users/me/file.xml')
root = tree.getroot()
for sect1 in root.findall('section1'):
root.remove(sect1)
我只是想念如何删除最顶层的元素。
任何帮助都将不胜感激。
答案 0 :(得分:0)
使用此:
for sect1 in root.findall('.//section1'):
root.remove(sect1)
.//
从第一个元素的所有子section1元素中进行选择。您可以使用'./section1/section2'
更具体地选择元素,也可以使用./section1[@Name="SomeValueForNameAttribute"]'
选择具有特定属性的元素,如果您想知道更多的信息,称为xpath并且记录了元素树提供的简化版本here
答案 1 :(得分:0)
我使用minidom解析xml文件和字符串,使用minidom可以轻松地执行所需的任何操作,这是您请求的示例,但使用的是xml.dom.minidom
库:-
from xml.dom.minidom import parse
doc = parse('/Users/me/file.xml')
root = doc.documentElement
for parent in root.childNodes:
for child in parent.childNodes:
if(child.tagName == 'table'):
parent.removeChild(child)