2014-10-22 84 views
-1

我嘗試解析XML文件。 主要目標是使用其他特定父標籤獲取特定標籤。 我必須使用一個已經存在的文件,我必須修改它。Python:通過引用和遞歸調用

def get_item_with_parents(self, parent, name, items=None, parents=None): 
    self.parents=parents 

    if items == None: 
     top_level = 1 
     items = [] 
     self.parents = [] 
    else: 
     top_level = 0 

    for child in self.children: 
     self._append_list(child.name) 
     if child.name == name and parent in self.parents: 
      print "inside if" 
      self._del_list() 
      items.append(child) 
      #print self.parents 
      child.get_item_with_parents(parent, name, items, self.parents) 

    if top_level: 
     return PacketList(items) 


def _append_list(self, item): 
    self.parents.append(item) 


def _del_list(self): 
    self.parents=[] 
    print "test" 
    print self.parents 

的代碼應做到以下幾點(孩子變量應該基本意味着相同的父的事):

我得到的父標籤應當返還的標籤的名稱。 然後我檢查我是否是第一次遞歸,否則我不會在最後返回數據包列表。

對於每個孩子,我嘗試將其名稱附加到我的self.parents列表中。然後我檢查我的數據包是否有正確的「名稱」,如果是,我會查看「父」是否在self.parent中。 現在就出現這個問題。

如果父母在列表中,我必須刪除列表中的所有內容。但是這不會工作。

列表不會被清除。因此,如果下一次出現名稱爲「名稱」的標籤,即使不應該出現,也會再次追加,因爲父級不應再出現在列表中

有人能告訴我爲什麼嗎?

+0

「但這不行。」 *不*有意義。請澄清你的意思是「不會工作」。它會引發錯誤嗎? (如果是這樣發佈完整的回溯)你會得到一個意想不到的結果嗎? (如果是這樣,發佈結果你[相對投入] *和*預期的結果,你想要的) – Bakuriu 2014-10-22 11:41:13

+0

是的..你是對的。對不起,它什麼都沒做。該列表不會被清除。因此,如果下一次出現名稱爲「名稱」的標籤,即使它不應該再次追加,因爲父級不應再出現在列表中 – Ventu 2014-10-22 11:54:59

回答

0

我發現我的錯誤。 要清除一個清單,我可以打電話del parents[:]

parents=[]不起作用(它接縫它根本就沒有)。