Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AS3按子值从XML中删除子节点_Xml_Actionscript 3_Apache Flex - Fatal编程技术网

AS3按子值从XML中删除子节点

AS3按子值从XML中删除子节点,xml,actionscript-3,apache-flex,Xml,Actionscript 3,Apache Flex,我得到了一个结构如下的XML <items> <item>5</item> <item>3006</item> <item>25</item> <item>458</item> <item>15</item> <item>78</item> </items> 5. 3006

我得到了一个结构如下的XML

 <items>
    <item>5</item>
    <item>3006</item>
    <item>25</item>
    <item>458</item>
    <item>15</item>
    <item>78</item>
 </items>

5.
3006
25
458
15
78
如何删除值为458的项。为了澄清这一点,我不知道该项的索引,因此简单地调用delete items[index]在这里是不行的。 我必须按值删除


有任何提示吗?

使用e4x筛选和在筛选器内使用函数的可能性您可以删除所需的节点:

  • item.(text()==value)将为您提供要查找的节点
  • valueOf()将为您提供正在筛选的当前节点
  • 删除将删除该节点
因此,结合这些信息,您可以:

var xml:XML=<items>
    <item>5</item>
    <item>3006</item>
    <item>25</item>
    <item>458</item>
    <item>15</item>
    <item>78</item>
 </items>;

 function deleteValue(xml:XML, value:String):void{
   xml.item.((text()==value) && (delete parent().children()[valueOf().childIndex()]));
 }

 deleteValue(xml, "458");

 trace(xml.toXMLString());
var-xml:xml=
5.
3006
25
458
15
78
;
函数deleteValue(xml:xml,value:String):void{
xml.item.((text()==value)&&(delete parent().children()[valueOf().childIndex()]);
}
deleteValue(xml,“458”);
跟踪(xml.toXMLString());

这应该可以解决这个问题。顺便说一句,这将删除所有名为“item”且值为458的直接儿童

delete xml.(item == "458");
要递归删除名称为“item”且值为458的所有子级和子级,请使用:

delete xml..(item == "458");

作品但是让我想哭。为了可读性,我会坚持使用For..loop。鉴于我访问初始XML的子组件,我的源XML将是一个XMLList(很抱歉,我刚刚意识到),因此我需要先将XMLList转换为XML,这会给我带来一些问题。这对我不起作用。我得到一个异常,说delete在XMLList上不起作用。我必须做的是:删除handXML.tile。(@type==boostType)[0]@DoomGoober这个答案基于这个特定的示例,如果您有一个不同的xml结构,它肯定不会工作。请看问题中提供的示例。你确定你没有只删除第一组标题吗?我的评论不清楚。但是,删除xml(item==“458”);也不行!xml。(item==“458”)计算为一个XMLList。delete对XMLList不起作用,只对XML本身起作用。因此,实际获取XML对象的唯一方法是使用索引器。删除xml。(项==“458”)[0];