Ich mag die folgende Syntax verwenden, um zu überprüfen, weil es einfach ist, zu lesen, weniger tippen und es fast als die schnellste Methode gebunden:
if ("@style" in item) // do something
Um einen Wert zuweisen zurück zu diesem Attribut, wenn Sie don ‚t wissen, den Namen, bevor Hand die attribute
Methode:
var attributeName:String = "style";
var attributeWithAtSign:String = "@" + attributeName;
var item:XML = <item style="value"/>;
var itemNoAttribute:XML = <item />;
if (attributeWithAtSign in itemNoAttribute) {
trace("should not be here if attribute is not on the xml");
}
else {
trace(attributeName + " not found in " + itemNoAttribute);
}
if (attributeWithAtSign in item) {
item.attribute(attributeName)[0] = "a new value";
}
All folgenden werden Möglichkeiten zu testen, ob ein Attribut aus den Antworten aufgelistet auf diesen ques gesammelt existiert tion. Da es so viele waren, lief ich jeweils im 11.7.0.225 Debug-Player. Der Wert auf der rechten Seite ist die verwendete Methode. Der Wert auf der linken Seite ist die niedrigste Zeit in Millisekunden, die benötigt wird, wenn der Code eine Million Mal ausgeführt wird. Hier sind die Ergebnisse:
807 item.hasOwnProperty("@style")
824 "@style" in item
1756 [email protected][0]
2166 (undefined != [email protected]["style"])
2431 (undefined != item["@style"])
3050 XML(item).attribute("style").length()>0
Leistung Test Code:
var item:XML = <item value="value"/>;
var attExists:Boolean;
var million:int = 1000000;
var time:int = getTimer();
for (var j:int;j<million;j++) {
attExists = XML(item).attribute("style").length()>0;
attExists = XML(item).attribute("value").length()>0;
}
var test1:int = getTimer() - time; // 3242 3050 3759 3075
time = getTimer();
for (var j:int=0;j<million;j++) {
attExists = "@style" in item;
attExists = "@value" in item;
}
var test2:int = getTimer() - time; // 1089 852 991 824
time = getTimer();
for (var j:int=0;j<million;j++) {
attExists = (undefined != [email protected]["style"]);
attExists = (undefined != [email protected]["value"]);
}
var test3:int = getTimer() - time; // 2371 2413 2790 2166
time = getTimer();
for (var j:int=0;j<million;j++) {
attExists = (undefined != item["@style"]);
attExists = (undefined != item["@value"]);
}
var test3_1:int = getTimer() - time; // 2662 3287 2941 2431
time = getTimer();
for (var j:int=0;j<million;j++) {
attExists = item.hasOwnProperty("@style");
attExists = item.hasOwnProperty("@value");
}
var test4:int = getTimer() - time; // 900 946 960 807
time = getTimer();
for (var j:int=0;j<million;j++) {
attExists = [email protected][0];
attExists = [email protected][0];
}
var test5:int = getTimer() - time; // 1838 1756 1756 1775
Überprüfen Sie meine Antwort am Ende. Ich glaube es ist das was du gesucht hast! :) – Rihards