0

我有删除特定节点的代码:

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 作为值的节点。

“什么都不做”脚本可以完成这项工作,但它很丑陋。

有没有更好的方法使用循环和简单的比较?

谢谢,

和欢呼。

4

3 回答 3

0

另一种解决方案。循环前:

var test2:XML = dbase.copy();

循环内部:

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

我确实用过这个。

感谢 dimpiax 和 djib。

于 2013-09-01T08:22:07.800 回答
0

利用 ”!” 反转(不)条件的布尔值:

if (!(db.children()[i].Name == "JAMES" && db.children()[i].Surname == "MAILER"))
{
    tempXML.appendChild(db.children()[i]);
}
于 2013-08-31T08:06:38.053 回答
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());
..
于 2013-08-31T17:45:16.323 回答