Math.floor(Math.random()...)不适用于xml和as3

时间:2013-11-19 17:18:18

标签: xml actionscript-3

这是我的代码:

 stop();
    var xmlLoader:URLLoader = new URLLoader();
    var xmlData:XML = new XML();

    xmlLoader.addEventListener(Event.COMPLETE, LoadXML);

    xmlLoader.load(new URLRequest("books.xml"));

    var authorText = xmlData.Book.author.text();
    var random1 = Math.floor( Math.random() * authorText.length );

    function LoadXML(e:Event):void {
    xmlData = new XML(e.target.data);
    vraag.text=( authorText[random1] );
    }

但我收到错误:

  

错误#2007:参数文本不能为空   flash.text :: TextField / set text()at   xmlflashwerkt_fla :: MainTimeline / LoadXML()at   flash.events :::EventDispatcher / dispatchEventFunction()at   flash.events :::EventDispatcher / dispatchEvent()at   flash.net::URLLoader/onComplete()

我认为它不起作用因为这一行:var authorText = xmlData.Book.author.text(); 但我不知道该怎么办

3 个答案:

答案 0 :(得分:0)

您可以尝试在authorText上设置一个断点,看看它是否在此时返回null或者断开。另外我注意到authorText和random1没有与它们相关联的Type。尝试var authoText:String和random1:Number,看看这是否有帮助。

答案 1 :(得分:0)

在尝试从中访问数据之前,您似乎还在等待加载XML。您需要将这些行放入与LoadXML事件关联的COMPLETE函数中:

function LoadXML(e:Event):void
{
    xmlData = new XML(e.target.data);
    vraag.text = authorText[random1];

    var authorText:String = xmlData.Book.author.text();
    // ---------------------^^^^^^^ xmlData is actually loaded with your XML at
    //                              this point.

    var random1:int = Math.random() * authorText.length;
}

答案 2 :(得分:0)

您在一个地方使用authortext作为字符串,其中它将具有length属性。但我认为您希望将其保留为XMLList对象。

但是接下来你试图将它用作一个具有索引" authorText [index]"的数组。 同样,这看起来像你想要一个XMLList对象。

所以试试这个:

您想知道authortext节点的数量。你需要使用:

var authorText:XMLList = xmlData.Book.author;

并且不包括" text()"最后,或者你得到一个字符串,而不是xml。

相反,要获得XMLList的长度,您需要:

var random1:int = Math.floor(Math.random()*xmlData.Book.author.length());

注意使用" length()"而不是"长度" - 这是因为xml可以生成名为" length"所以要获得孩子的数量,你必须调用一种方法"()"代替。

所以整个方法是:

停止();     var xmlLoader:URLLoader = new URLLoader();     var xmlData:XML = new XML();

xmlLoader.addEventListener(Event.COMPLETE, LoadXML);

xmlLoader.load(new URLRequest("books.xml"));


function LoadXML(e:Event):void {
xmlData = new XML(e.target.data); // get the xml data
var authorText:XMLList = xmlData.Book.author; // get the list of author nodes
var random1:int = Math.floor( Math.random() * authorText.length() ); // get a number in the range
vraag.text=( authorText[random1] ); // display that node
}