2011-02-03 7 views
0

ActionScriptでXMLを使用していて、ノード参照を提供することでノードを削除する方法を探しています。リファレンスでXMLをノードから削除するAS3

サンプル:

var node:XML = 
<node> 
<child a="1" b="2" c="3" /> 
<child a="2" b="2" c="3" /> 
<child a="3" b="4" c="3" /> 
<child a="4" b="2" c="6" /> 
</node>; 

var targetChild:Xml = [email protected](a==1)[0]; 

現在、私は、ノードの除去を達成するために、次を使用しています。 また、ツリーをもう一度繰り返したり、ノードをフィルタリングしてtargetChildを見つけたりしないようにしました。

delete (targetChild.parent().children()[targetChild.childIndex()]); 

どういうわけか私はそれを行うのは非常にクリーンな方法だとは思わないが、それは動作します。 参照によってノードを削除する別の方法があるのでしょうか?

答えて

1

two ways two delete by reference

package { 
    /** 
    * ... 
    * @author www0z0k 
    */ 
    import flash.text.TextField; 
    import flash.display.Sprite; 
    import flash.text.TextFieldAutoSize; 
    public class FlashTest extends Sprite { 
     private var tf:TextField; 
     public function FlashTest() { 
      tf = new TextField(); 
      addChild(tf); 
      tf.multiline = true; 
      tf.autoSize = TextFieldAutoSize.LEFT; 

      var node:XML = new XML('<node><child a="1" b="2" c="3"/><child a="2" b="2" c="3"/><child a="3" b="4" c="3"/><child a="4" b="2" c="6"/></node>');    
      tf.appendText('before:\n' + node); 
      var xml1:XML = node.descendants('child').(@a == '3')[0]; 
      var xml3:XML = node.descendants('child').(@a == '1')[0]; 
      killXMLFromList(xml1, node.descendants(xml1.name())); 
      delete node.descendants(xml3.name()).(@a == xml3.attribute('a'))[0]; 
      tf.appendText('\nafter:\n' + node);   
     } 

     private function killXMLFromList(xml:XML, list:XMLList):void{   
      for (var i:int = 0; i < list.length(); i++) { 
       if (list[i] == xml) { 
        delete list[i]; 
       } 
      } 
     } 


    } 
} 
+0

申し訳ありませんが、例が明確ではないかもしれません。ノードには一意の識別子属性はありません。私はすでにターゲットノードを別の場所で参照していますが、ツリー上で検索/比較をやり直したくないです。 – Eatdoku

+0

@ Eatdoku - 私の答えを – www0z0k

+0

@ jschoen - 更新しました(ただし、wonderflが死ぬと信じるのは難しいです)) – www0z0k

関連する問題