我有删除特定节点的代码:
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来添加与条件语句不匹配的节点。
如果我使用:
if (db.children()[i].Name == "JAMES" && db.children()[i].Surname == "MAILER")
我可以避免使用“else”,但代码会删除所有具有JAMES或MEX值的节点。
“无所事事”脚本完成这项工作,但这很难看。
使用循环和简单的比较有更好的方法吗?
谢谢,
和欢呼。
答案 0 :(得分:0)
使用“!”反转(NOT)条件的布尔值:
if (!(db.children()[i].Name == "JAMES" && db.children()[i].Surname == "MAILER"))
{
tempXML.appendChild(db.children()[i]);
}
答案 1 :(得分: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());
..
答案 2 :(得分:0)
另一种解决方案。在循环之前:
var test2:XML = dbase.copy();
循环内部:
if (test2.employee[i].Name == "JAMES" && test2.employee[i].Surname == "MAILER")
{
delete test2.employee[i];
}
我确实使用过这个。
感谢dimpiax和djib。