我正在使用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()]);
不知何故,我觉得这不是一种非常干净的方式,但它确实有效。 我想知道是否有另一种方法可以通过引用删除节点?
答案 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];
}
}
}
}
}