AS3,通过引用从XML中删除节点

时间:2011-02-03 18:56:50

标签: xml actionscript-3

我正在使用ActionScript中的XML并尝试通过提供节点引用来找到删除节点的方法。

样品:

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 = node.child.@(a==1)[0];

目前,我正在使用以下内容来完成节点的删除。 此外,我不想再次遍历树或过滤节点以找到我已经引用的targetChild。

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

不知何故,我觉得这不是一种非常干净的方式,但它确实有效。 我想知道是否有另一种方法可以通过引用删除节点?

1 个答案:

答案 0 :(得分: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];
                }
            }
        }


    }
}