AS3/Flash:基于两个值的XML节点删除
我有删除特定节点的代码:AS3/Flash:基于两个值的XML节点删除,xml,actionscript-3,nodes,Xml,Actionscript 3,Nodes,我有删除特定节点的代码: var db: XML = <db> <entry> <Name>JAMES</Name> <Surname>MAILER</Surname> <Date>28/08/2013</Date> </entry> <entry> <Name>NATA<
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;
}
我可以避免使用“else”,但代码会删除所有以JAMES或MEX作为值的节点
“什么都不做”的剧本可以完成任务,但很难看
有没有更好的方法使用循环和简单比较
谢谢
和干杯。使用“!”反转(非)条件的布尔值:
if (!(db.children()[i].Name == "JAMES" && db.children()[i].Surname == "MAILER"))
{
tempXML.appendChild(db.children()[i]);
}
您可以为此使用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());
..
另一个解决方案。循环之前:
var test2:XML = dbase.copy();
if (test2.employee[i].Name == "JAMES" && test2.employee[i].Surname == "MAILER")
{
delete test2.employee[i];
}
在循环内部:
var test2:XML = dbase.copy();
if (test2.employee[i].Name == "JAMES" && test2.employee[i].Surname == "MAILER")
{
delete test2.employee[i];
}
我确实用过这个
谢谢dimpiax和djib。谢谢djib!我确实使用了另一种方法,但你的方法也同样有效。两者都是很好的解决方案。