http://www.twowaysthroughlife.com/
AS3中XML使用汇总
一般情况下,name和localName一样。var nodeNmae:String = list[i].name();//trace(i+" "+list[i].localName());trace(i+" "+list[i].name());
shiftLoop
下面是失败的:
public static function getChildAsObject(xObj:XML):Object {
var obj:Object = new Object();
//trace("xObj ->"+ xObj);
//trace("child ->"+ xObj.data);
var a:Object, c:Object, nName:String, nType:Number, nValue:String, cCount:Number;
for (a in xObj.attributes) {
trace("123"+a.name());
obj[a] = xObj.attributes[a];
}
//for (c in xObj.childNodes) {
//trace("c "+xObj.child("*"));
var child:XMLList = xObj.children();
for (var i:int = 0; i < child.length();i++ ) {
var c = child[i];
//trace("c " + c);
if (c.nodeKind() != "comment") {
nName = c.localName();
nType = c.nodeKind ();
nValue = c.nodeValue;
if (nType == 3) {
obj._value = nValue;
obj._type = 'text';
}
if (nType == 1 && nName != null) {
if (obj[nName] == null) {
obj[nName] = getChildAsObject(xObj.childNodes[c]);
} else if (obj[nName]._type != 'array') {
obj[nName] = [obj[nName]];
obj[nName]._type = 'array';
}
if (obj[nName]._type == 'array') {
obj[nName].unshift(getChildAsObject(xObj.childNodes[c]));
}
}
}
}
return obj;
}
这段代码:
var txt:TextField = new TextField();
txt.text = Main.xml.@title;
txt.width = ST.width;
txt.selectable = false;
addChild(txt);
var tf:TextFormat = new TextFormat();
tf.align = "center";
tf.size = 24;
txt.setTextFormat(tf);
用101可以写成
var LBtitle:Label = new Label(this, 0, 0, Main.xml.@title);
LBtitle.width = ST.width;
var tf:TextFormat = new TextFormat();
tf.align = "center";
tf.size = 24;
LBtitle.setTextFormat(tf);
AS3中XML要获取属性有2个:attributes和attribute,注意他们都是方法。就是写法不同——有没有s,用起来没什么区别。
attribute("*")和attributes()等效。
返回XMLList,当Array来用,用for...in,会发现
arg[0]=Data1
arg[1]=Data2
也就是说和数组是一回事。也就是说可以用for..i++遍历,要记住一点,其长度用的是方法——length(),而不是属性——length,这一点和数组很不一样。
其实这点屁大的事根本不用记——为效率,我们通常用for..in遍历,不用for..i++遍历,哈哈哈。
为简单,我通常让xml的属性名直接用到MC的属性名上,所以要取得属性名。
要取得属性名,关键是name()
var arg:XMLList = list[i].attribute("*");
for (var j:String in arg)
{
trace(j+"..."+arg[j].name());
var attrName:String = arg[j].name();
if (attrName == "text" || attrName == "label" ) {
trace("........")
end[attrName] = arg[j];
}
}
AS2