无法使用Python使用xml minidom正确删除嵌套的xml标签

问题描述 投票:0回答:1

我正在尝试使用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())
python python-3.x xml tags minidom
1个回答
0
投票

如果只想删除所有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>
© www.soinside.com 2019 - 2024. All rights reserved.