Удаление определенного узла с использованием синтаксиса e4x - PullRequest
3 голосов
/ 24 мая 2011

У меня есть такая структура 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 ]

2 голосов
/ 02 июля 2013
numb.variable.(name=="johanna") 

возвращает список xmllist из одного элемента xml, поэтому для его удаления необходимо использовать этот синтаксис

delete numb.variable.(name=="johanna)[0] as XML;
2 голосов
/ 24 мая 2011

Вы можете извлечь дочерние узлы, которые имеют другое имя из johanna и установить их в качестве дочерних узлов, используя метод setChildren () .

, например

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()];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...