12

如何在不使用循环的情况下将以下 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 中是否有更简单的方法来执行此操作

4

6 回答 6

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())
);  

toString() 调用可以替换为attribute() 调用以提取属性。

于 2010-08-24T15:34:01.523 回答
4

这个效果很好:

public static function xmlListToArray($x:XMLList):Array {           
    var a:Array=[], i:String;
    for (i in $x) a[i] = $x[i];
    return a;
}
于 2009-12-06T00:04:56.937 回答
2

您当前的实现绰绰有余。您可以进行的唯一优化(尽管除非您使用 Vector.<>,否则我不会打扰)是将初始容量传递给 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;
}
于 2009-02-25T10:32:02.710 回答
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.

我自己在闪存中确认了这一点。就我个人而言,使用可选行和引用等对我来说是有意义的,labels[0]但这里不需要。

我知道您要求一个字符串数组作为输出,但基本上我是在问您为什么不能只使用 XMLList 对象的数组访问器。

这是一个很好的演练:E4X上的Senocular

于 2010-01-20T03:08:01.227 回答
1

for循环在 AS 中非常快。你为什么需要那个?但是你可以试试这个:

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);
}
于 2009-02-24T20:41:11.053 回答
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;
    }
于 2009-12-05T23:32:00.060 回答