2011-02-09 83 views
0

我想使用delete關鍵字從xml文件中刪除節點,它只是普通不起作用。xml節點將不會刪除,儘管調用「刪除」

下面是我正在使用的一個簡單例子。每個節點都有一個名爲「deleteme」的子節點。如果它的值等於1我想從xml文件中刪除它。如果其他任何我想離開的話。刪除方法是精確地gettig調用,但它沒有效果。

<?xml version="1.0" encoding="utf-8"?> 

    <stuff> 
     <i> 
      <deleteme> 
      0 
      </deleteme> 
     </i> 
     <i> 
      <deleteme> 
      1 
      </deleteme> 
     </i> 
     <i> 
      <deleteme> 
      0 
      </deleteme> 
     </i> 

    </stuff> 

的ActionScript

var xmlList:XMLList=_sourceXML.i; 

       for (var j:int=0; j < _xmlList.length(); j++) 
       { 

        if (xmlList[j].deleteme== 1) 
        { 
         delete xmlList[j]; 

        } 

       } 
//breakpoint here. xmlList still contains nodes that should have been deleted 
       xmlListColl=new XMLListCollection(xmlList); 
       xmlListColl.refresh() 

編輯

如果我前後刪除圈長度確實是不同的跟蹤的XMLList lenght。看起來由於某種原因,被傳遞給xmllistcollection的xmllist是沒有被刪除的節點。對我沒有意義。

編輯2

下面給出所需的結果。我仍然想知道爲什麼前一種方法不起作用。

for (var j:int=0; j < xmlList.length(); j++) 
       { 
        //trace(xmlList[j].deleteme) 
        if (xmlList[j].deleteme!=1) 
        { 
         //delete xmlList[j]; 
         xmlListColl.addItem(xmlList[j]) 

        } 

       } 
+0

我知道這聽起來很愚蠢,但你確定你保存在最後的新文件? – Manatherin 2011-02-09 14:22:42

+0

我更新了我的問題以更詳細地顯示問題。我非常確定,我正嘗試使用的xmllist是我從 – dubbeat 2011-02-09 14:47:26

回答

3

你需要做的'for循環' 反向。這用於通過迭代循環移除任何集合/列表中的項目。

當一個項目被刪除時(例如,當j是2時的索引2),列表中的下一個項目填充被刪除項目留下的空間(例如索引3 becmoes索引2),但是j增加到3,並且移位的項目(在索引2中)被跳過。以下將工作:

var _xmlList:XMLList=_sourceXML.i; 

for (var j:int=_xmlList.length() - 1; j >= 0 ; j--) 
{     
    if (_xmlList[j].deleteme == 1) 
    { 
     delete _xmlList[j];      
    }     
}