2013-08-31 4 views
0

je ce code pour la suppression d'un nœud spécifique dans:AS3/Flash: suppression de noeud XML basé sur deux valeurs

var db: XML = <db> 
    <entry> 
     <Name>JAMES</Name> 
     <Surname>MAILER</Surname> 
     <Date>28/08/2013</Date> 
    </entry> 
    <entry> 
     <Name>NATA</Name> 
     <Surname>KING</Surname> 
     <Date>28/08/2013</Date> 
    </entry> 
    <entry> 
     <Name>ROMAN</Name> 
     <Surname>ALDA</Surname> 
     <Date>28/08/2013</Date> 
    </entry> 
    <entry>...</entry> 
</db> 

clean(); 

function clean():void 
{ 
var tempXML:XML = <db></db>; 
var count:int = db.children().length(); 
trace (count); 

for (i=0; i < count; i++) 
{ 
    if (db.children()[i].Name == "JAMES" && db.children()[i].Surname == "MAILER") 
    { 
        //do nothing 
    }else{ 
     tempXML.appendChild(db.children()[i]); 
    } 
} 
db = tempXML; 
} 

Comme vous pouvez le voir, je suis en utilisant l'autre pour ajouter les noeuds qui n » t correspond à l'instruction conditionnelle.

Si j'utilise:

if (db.children()[i].Name == "JAMES" && db.children()[i].Surname == "MAILER") 

je peux éviter le « autre », mais le code supprime tous les nœuds qui ont JAMES ou MEX comme valeurs.

Le script "ne rien faire" fait l'affaire, mais c'est moche.

Y a-t-il un meilleur moyen d'utiliser des boucles et une comparaison simple?

Merci,

et bravo.

Répondre

0

Utilisez "!" inverser (NOT) la valeur booléenne de la condition:

if (!(db.children()[i].Name == "JAMES" && db.children()[i].Surname == "MAILER")) 
{ 
    tempXML.appendChild(db.children()[i]); 
} 
+0

Merci djib! J'ai utilisé une autre méthode, mais la vôtre fonctionne aussi bien. Les deux sont de bonnes solutions. – Sergio

0

Vous pouvez utiliser la syntaxe E4X pour cela, par exemple:

.. 
const lookupXMLList : XMLList = db.*.(Name != "JAMES" && Surname != "MAILER"); 
trace("Result:", lookupXMLList.toXMLString()); 
.. 

Mais, dans votre cas, la meilleure solution est - en supprimant des nœuds inutiles :

.. 
const removingXMLList : XMLList = db.*.(Name == "JAMES" && Surname == "MAILER"); 
for(var i : String in removingXMLList.*) delete removingXMLList[0]; 
trace("Result:", removingXMLList.toXMLString()); 
.. 
0

Une autre solution. Avant la boucle:

var test2:XML = dbase.copy(); 

intérieur de la boucle:

if (test2.employee[i].Name == "JAMES" && test2.employee[i].Surname == "MAILER") 
{ 
    delete test2.employee[i]; 
} 

Je l'ai fait utiliser celui-ci.

Merci dimpiax et djib.

Questions connexes