使用e4x语法删除特定节点

时间:2011-05-24 06:26:42

标签: xml flex flex4

我有这种XML结构:

<numb>
  <variable>
   <name>john</name>
   <age>12</age>
 </variable>
 <variable>
   <name>janet</name>
   <age>10</age>
 </variable>
 <variable>
   <name>johanna</name>
   <age>22</age>
 </variable>
 <variable>
  <name>harry</name>
  <age>24</age>
 </variable>
</numb>

如果我尝试删除名为 johanna 的变量,我会这样做:

  delete numb.variable.(name=="johanna);

然后,我收到了这个错误:

 "Error #1119: Delete operator is not supported with operand of type XMLList"

建议使用numb.variable。(name ==“johanna”)是一个XMLList ..但后来我尝试了这个:

delete XML(numb.variable.(numb=="johanna"); 

但是没有删除任何内容..

任何人都知道如何删除麻木XML中的某个变量?

2 个答案:

答案 0 :(得分:2)

您可以使用setChildren()方法检索 johanna 中具有不同名称的子节点,并将其设置为子节点。

e.g。

var xml:XML = <numb>
  <variable>
   <name>john</name>
   <age>12</age>
 </variable>
 <variable>
   <name>janet</name>
   <age>10</age>
 </variable>
 <variable>
   <name>johanna</name>
   <age>22</age>
 </variable>
 <variable>
  <name>harry</name>
  <age>24</age>
 </variable>
</numb>

xml.setChildren(xml.variable.(name != 'johanna'));
trace(xml);
/*
Outputs:
<numb>
  <variable>
    <name>john</name>
    <age>12</age>
  </variable>
  <variable>
    <name>janet</name>
    <age>10</age>
  </variable>
  <variable>
    <name>harry</name>
    <age>24</age>
  </variable>
</numb>
*/

另一种选择是遍历满足条件的每个节点,并使用childIndex()方法通过数组访问表示法删除相应的节点:

简短版本:

for each (var match:XML in xml.variable.(name == 'johanna')) delete xml.variable[match.childIndex()];

更长的版本:

var xml:XML = <numb>
  <variable>
   <name>john</name>
   <age>12</age>
 </variable>
 <variable>
   <name>janet</name>
   <age>10</age>
 </variable>
 <variable>
   <name>johanna</name>
   <age>22</age>
 </variable>
 <variable>
  <name>harry</name>
  <age>24</age>
 </variable>
</numb>;

var matches:XMLList = xml.variable.(name == 'johanna');
for each (var match:XML in matches) delete xml.variable[match.childIndex()];

答案 1 :(得分:2)

numb.variable.(name=="johanna") 

返回一个xml元素的xmllist,所以要删除它,你必须使用这个语法

delete numb.variable.(name=="johanna)[0] as XML;