如何使用minidom检查xml节点是否在python中有子节点?

时间:2013-07-12 19:11:49

标签: python xml minidom

如何使用minidom检查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 个答案:

答案 0 :(得分:2)

你处在一个无限循环中。这是你的问题:

            node = removeAllAttributes(dom)

我认为你的意思是

            node = removeAllAttributes(node)

答案 1 :(得分: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)