2011-02-09 80 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];      
    }     
}