Не удается правильно удалить вложенные теги xml с помощью Python, используя xml minidom - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь удалить некоторые вложенные теги xml, представленные в виде строки, используя Python 3.8 и встроенные xml .dom.minidom. Результат удивителен, парсер удаляет только первый или открытый тег и оставляет закрытый тег. Конечно, я что-то упускаю, но я не вижу, что это такое.

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())

1 Ответ

1 голос
/ 04 апреля 2020

Если вы просто хотите удалить все элементы 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>
...