as3随机访问XML数据

时间:2011-10-21 09:32:13

标签: xml arrays actionscript-3

从XML源读取数据后,我希望能够在数据中显示一个随机项,比如单击一个按钮。我想我可以通过将数据存储到数组中并从数组中使用它来实现这一目标 我想学习如果可能直接从xml中完成它而不将其存储到另一个数组中。提前致谢

var myXMLLoader:URLLoader = new URLLoader();
myXMLLoader.load(new URLRequest("XML_NOTES.xml"));
myXMLLoader.addEventListener(Event.COMPLETE, processXML);


function processXML(e:Event):void {
            var loader:URLLoader = e.target as URLLoader;
            var myXML:XML = new XML(loader.data);
            for (i=0;i<2;i++){
            trace(myXML.LEMMA[i]);
            array.push(myXML.LEMMA[i]);
            }

}

2 个答案:

答案 0 :(得分:0)

如果我正确理解了这个问题:

function processXML(event:Event):void
{
    var myXML:XML = XML((e.target as URLLoader).data);
    var children:XMLList = myXML.*;
    trace(children[Math.random() * children.length()].toXMLstring());
}

请注意,虽然它叫做XML List ,但它实际上是一个数组,更多的是,它是一个真正的数组(密集),不像Array类:)(它是一个数组和字符串的混合哈希值)。因此,通过索引访问元素没有问题 - 无需转换为数组。

答案 1 :(得分:0)

您可以直接从myXML变量执行此操作,您需要将myXML设置为全局变量:

var myXML:XML;
var myXMLLoader:URLLoader = new URLLoader();
myXMLLoader.load(new URLRequest("XML_NOTES.xml"));
myXMLLoader.addEventListener(Event.COMPLETE, processXML);

function processXML(e:Event):void {
    var loader:URLLoader = e.target as URLLoader;
    myXML = new XML(loader.data);
}

function getRandomItem():XML {
    var elementsCount:int = myXML.LEMMA.length();
    var randomIndex:int = Math.floor( Math.random() * (elementsCount-1) );
    return myXML.LEMMA[randomIndex];
}