Как проверить, есть ли у узла xml дочерние элементы в python с минидомом?
Как проверить, есть ли у узла xml дочерние элементы в python с минидомом?
Я пишу рекурсивную функцию для удаления всех атрибутов в XML-файле, и мне нужно проверить, есть ли у узла дочерние узлы, прежде чем снова вызывать ту же функцию.
Что я пробовал: я пытался использовать node.childNodes.length, но мне не повезло. Любые другие предложения?
Спасибо
Мой код:
def removeAllAttributes(dom):
for node in dom.childNodes:
if node.attributes:
for key in node.attributes.keys():
node.removeAttribute(key)
if node.childNodes.length > 1:
node = removeAllAttributes(dom)
return dom
Код ошибки: RuntimeError: превышена максимальная глубина рекурсии
2 ответа
Вы находитесь в бесконечном цикле. Вот ваша проблема:
node = removeAllAttributes(dom)
Я думаю ты имеешь ввиду
node = removeAllAttributes(node)
Вы могли бы попробовать hasChildNodes()
- хотя если проверка атрибута childNodes напрямую не работает, у вас могут возникнуть другие проблемы.
По-видимому, ваша обработка отбрасывается, потому что у вашего элемента нет дочерних элементов, но есть текстовые дочерние элементы или что-то еще. Вы можете проверить это следующим образом:
def removeAllAttributes(element):
for attribute_name in element.attributes.keys():
element.removeAttribute(attribute_name)
for child_node in element.childNodes:
if child_node.nodeType == xml.dom.minidom.ELEMENT_NODE:
removeAllAttributes(child_node)