这是我的代码:
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();
但我不知道该怎么办
答案 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
}