如何在不使用循环的情况下将以下XMLList转换为字符串数组?
<labels>
<label>All</label>
<label>your</label>
<label>base</label>
<label>are</label>
<label>belong</label>
<label>to</label>
<label>us.</label>
</labels>
我想要这个结果:
["All","your","base","are","belong","to","us."]
现在,我正在做以下事情:
var labelsArray:Array /* of String */ = [];
for each (var labelText:String in labels.label)
{
labelsArray.push(labelText);
}
我想知道在ActionScript 3.0中是否有更简单的方法来执行此操作
答案 0 :(得分:14)
这很好但是使用了一些奇怪的XMLList语法。如果需要,最后一个语句可以放在一行上。
var labels:XML = <labels>
<label>All</label>
<label>your</label>
<label>base</label>
<label>are</label>
<label>belong</label>
<label>to</label>
<label>us.</label>
</labels>;
var labelsArray:Array /* of String */ = [];
labels.label.
(
labelsArray.push(toString())
);
可以使用attribute()调用替换toString()调用以拉出属性。
答案 1 :(得分:4)
这个很好用:
public static function xmlListToArray($x:XMLList):Array {
var a:Array=[], i:String;
for (i in $x) a[i] = $x[i];
return a;
}
答案 2 :(得分:2)
您当前的实施绰绰有余。你可以做的唯一优化(虽然我不会打扰,除非你使用Vector。&lt;&gt;)是将初始容量传递给Array构造函数:
var xmlLabels : XMLList = labels.label;
var labelsArray:Array /* of String */ = new Array(xmlLabels.length);
var index : int = 0;
for each (var labelText:String in xmlLabels)
{
labelsArray[index++] = labelText;
}
答案 3 :(得分:2)
尽管for
循环的认真使用并且在给定XML
对象的逻辑上工作,但这是XMLList
的工作。
最好看起来像这样:
var xml:XML =
<labels>
<label>All</label>
<label>your</label>
<label>base</label>
<label>are</label>
<label>belong</label>
<label>to</label>
<label>us.</label>
</labels>
;
var list:XMLList = xml.label;
var labels:XMLList = list.text(); //Optional
trace(list[0]);
trace(list[3]);
trace(list[6]);
这将输出:
All
are
us.
我自己在flash中证实了这一点。就个人而言,使用可选行并引用labels[0]
等对我来说是有意义的,但这里不需要。
我知道你要求输出一个字符串数组,但基本上我问你为什么不能只使用XMLList对象的数组访问器。
这是一个很好的演练:Senocular on E4X。
答案 4 :(得分:1)
for
循环非常快。你为什么需要那个?但你可以尝试一下:
private function toArray():void {
var xml:XML = <labels>
<label>all</label>
<label>your</label>
</labels>;
var array:* = xml.label.text().toXMLString().split("\n") ;
trace(array as Array);
}
答案 5 :(得分:0)
我觉得那里有一个单行的地方......好吧。
问题:为什么.length会在这里失败? (总是0)
public static function xmlListToArray($x:XMLList):Array {
var t:int = $x.length;
var a:Array=new Array(t), i:int;
for (i = 0; i < t; ++i) a[i] = $x[i];
return a;
}