无法使用 xml minidom 正确删除带有 Python 的嵌套 xml 标签
Can't properly remove nested xml tags with Python using xml minidom
我正在尝试使用 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>
我正在尝试使用 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>