Как проверить, есть ли у узла 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)           
Другие вопросы по тегам