0

如何检查xml节点是否在带有minidom的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:超出最大递归深度

4

2 回答 2

2

您处于无限循环中。这是您的问题行:

            node = removeAllAttributes(dom)

我想你的意思是

            node = removeAllAttributes(node)
于 2013-07-12T19:28:43.460 回答
0

您可以尝试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)           
于 2013-07-12T19:15:18.643 回答