2013-08-31 4 views
0

나는 especific 노드의 삭제 그 코드를 기반으로 XML 노드 삭제 :AS3/플래시 : 두 값

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; 
} 

당신은 내가 '아무튼 노드를 추가 할 다른 사용하고 볼 수 있듯이 조건문과 일치하지 않는다.

내가 사용하는 경우 :

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

는 나는 "다른"을 피할 수 있지만, 코드 값으로 JAMES 또는 MEX있는 모든 노드를 제거합니다.

"아무 것도하지 않는"스크립트가 효과가 있지만 추한 것입니다.

루프와 간단한 비교를 사용하는 더 좋은 방법이 있습니까?

감사합니다.

및 환호.

답변

0

"!" 당신은이에 대한 E4X 구문을 사용할 수 있습니다

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

감사합니다. djib! 나는 다른 방법을 사용했으나 네가 잘 작동한다. 두 가지 모두 훌륭한 솔루션입니다. – Sergio

0

예 : (NOT) 조건의 부울 값 반전

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

를하지만, 귀하의 경우, 최적의 솔루션입니다 - 쓸모 노드를 제거 :

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

다른 해결책. 루프 내부

var test2:XML = dbase.copy(); 

: 루프 전에

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

나는이 하나를 사용했다.

감사합니다. dimpiax 및 djib.