2013-04-12 38 views
1

移除元素時嘗試從XML文檔中刪除元素時,我發現了以下錯誤提示錯誤。 「ValueError異常:list.remove(x)的在列表中X不爲」下面是代碼,就用刪除行發生錯誤。Python的ElementTree的從根

import xml.etree.ElementTree as ET 
tree = ET.parse("AddInClasses.xml") 
rootElem = tree.getroot() 
for class2 in rootElem.findall("Transforms/class"): 
    name2 = class2.find("name") 
    if name2.text == "Get Field": 
     rootElem.remove(class2) 
tree.write("AddInClassesTrimmed.xml") 

回答

9

您遍歷不在根的直接子元素。您需要獲得對直接父母的引用,而不是

隨着ElementTree的是不那麼容易,有上的元素沒有父指針。你將需要循環Transforms第一,然後在class

for parent in rootElem.findall("Transforms[class]"): 
    for class2 in parent.findall("class"): 
     name2 = class2.find("name") 
     if name2.text == "Get Field": 
      parent.remove(class2) 

我增加了一個額外的循環,發現有其中所含的至少一個class元素中的所有元素Transforms

如果你使用lxml代替,那麼你可以只使用class2.getparent().remove(class2)

+0

這工作就像一個魅力。謝謝! – Derick

+0

啊,謝謝@MartijnPieters先生,因爲我一直在尋找這一切!我試圖使用ElementTree。我只是切換到lxml使用getparent(),它的工作就像一個魅力。親愛的上帝,我這個淨化XML中超過30萬行代碼,並拿出所有這些不必要的標籤,現在有一個乾淨的5000行的XML。閱讀起來更清晰並且更易於使用。 Upvoted,repped,TU等 –