2013-07-12 101 views
0

如何檢查xml節點是否在使用minidom的python中有子項?如何檢查一個xml節點是否在python中使用minidom有孩子?

我正在寫一個遞歸函數來刪除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) 
+0

好電話!這解決了它!我會投票你的答案,但我沒有足夠的代表:) –

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)   
+0

只是去嘗試,我得到了相同的錯誤代碼:RuntimeError:最大遞歸深度超過 –

+0

是的,你需要檢查的類型孩子的節點。查看編輯後的版本。 –

相關問題