2013-08-31 58 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

使用 「!」反轉(NOT)條件的布爾值:

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

謝謝djib!我確實使用了另一種方法,但是你的工作和以前一樣。兩者都是很好的解決方 – Sergio

0

可以使用E4X語法對於這一點,例如:

.. 
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。