我正在尝试使用Python 3.8删除一些表示为字符串并内置在xml.dom.minidom中的xml嵌套标签。结果令人惊讶,解析器仅删除第一个或打开的标签,而留下关闭的标签。我当然想念什么,但是看不到它是什么。
import xml.dom.minidom as xml
StringXML = "<root><test1><test2></test2></test1><test1><test2></test2></test1><test1><test2></test2></test1><test1><test2></test2></test1></root>"
a = xml.parseString(StringXML)
num = 0
while (a.getElementsByTagName('test2').length > num):
if(a.getElementsByTagName('test2')[num]):
a.getElementsByTagName('test2')[num].parentNode.removeChild(a.getElementsByTagName('test2')[num])
a.getElementsByTagName('test2')[num].unlink()
num = num +1
print(a.toxml())
如果只想删除所有test2
元素,则无需增加计数器。只需迭代getElementsByTagName('test2')
返回的项目即可。
import xml.dom.minidom as xml
StringXML = "<root><test1><test2></test2></test1><test1><test2></test2></test1><test1><test2></test2></test1><test1><test2></test2></test1></root>"
a = xml.parseString(StringXML)
for test2 in a.getElementsByTagName('test2'):
test2.parentNode.removeChild(test2)
# Need to add empty text node to get <test1></test1> serialization
for test1 in a.getElementsByTagName('test1'):
test1.appendChild(a.createTextNode(''))
print(a.toprettyxml())
输出:
<?xml version="1.0" ?>
<root>
<test1></test1>
<test1></test1>
<test1></test1>
<test1></test1>
</root>