Flash-XML随机文本显示
我被这件事难住了。。。我只想在Flash中显示xml文件中的随机节点。。。 我可以很好地显示一个节点,但如果尝试显示2个或更多节点,Flash会将XML标记粘贴回项目上-在urlLoader_complete函数中更改以下问题的编号,以了解我的意思。 以下是我的AS3:Flash-XML随机文本显示,xml,flash,Xml,Flash,我被这件事难住了。。。我只想在Flash中显示xml文件中的随机节点。。。 我可以很好地显示一个节点,但如果尝试显示2个或更多节点,Flash会将XML标记粘贴回项目上-在urlLoader_complete函数中更改以下问题的编号,以了解我的意思。 以下是我的AS3: var questions:XML; var urlRequest:URLRequest = new URLRequest("breakfast.xml"); var urlLoader:URLLoader = new URL
var questions:XML;
var urlRequest:URLRequest = new URLRequest("breakfast.xml");
var urlLoader:URLLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
urlLoader.addEventListener(Event.COMPLETE, urlLoader_complete);
urlLoader.load(urlRequest);
function urlLoader_complete(evt:Event):void {
questions = new XML(evt.target.data);
textArea.text = generateRandomQuestions(questions, 2).toString();
}
function generateRandomQuestions(source:XML, nodes:int = 6):XMLList
{
if (source.*.length() < nodes) return source.*;
var list:XMLList;
var hash:Array = [];
var randomPosition:int;
var node:XML;
do
{
node = source.*[(Math.random() * source.*.length()) >> 0];
if (hash.indexOf(node.toXMLString()) < 0)
{
hash.push(node.toXMLString());
list ? list += node : list = XMLList(node);
}
} while (list.length() < nodes)
return list;
}
var问题:XML;
var urlRequest:urlRequest=newurlrequest(“breakth.xml”);
var urlLoader:urlLoader=新的urlLoader();
urlLoader.dataFormat=URLLoaderDataFormat.TEXT;
urlLoader.addEventListener(Event.COMPLETE,urlLoader_COMPLETE);
加载(urlRequest);
函数urlLoader_complete(evt:事件):void{
问题=新的XML(evt.target.data);
textArea.text=generateRandomQuestions(questions,2).toString();
}
函数GeneratorDomainQuestions(源:XML,节点:int=6):XMLList
{
if(source.*.length()>0];
if(hash.indexOf(node.toXMLString())<0)
{
push(node.toXMLString());
list?list+=节点:list=XMLList(节点);
}
}while(list.length()<节点)
退货清单;
}
和我的XML:
<?xml version="1.0" encoding="utf-8"?>
<breakfast>
<person>K</person>
<person>Dave</person>
<person>Andrew</person>
<person>Bart</person>
<person>Ricky</person>
</breakfast>
K
戴夫
安得烈
巴特
瑞奇
试试这个
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
var urlRequest:URLRequest = new URLRequest("test.xml");
var urlLoader:URLLoader = new URLLoader();
urlLoader.load(urlRequest);
urlLoader.addEventListener(Event.COMPLETE, loadComplete, false, 0, true);
function loadComplete(evt:Event):void
{
var xml:XML = new XML(evt.target.data);
trace(generateRandomNodes(xml, 3).toString());
}
function generateRandomNodes(xml:XML, limit:int):Array
{
var nodes:Array = new Array();
for each(var node in xml.children())
{
nodes.push(node);
}
if(limit <= nodes.length)
{
nodes = shuffleArray(nodes);
return nodes.slice(0, limit);
}else
{
return [];
}
}
function shuffleArray(array:Array):Array
{
var temp:Array = new Array();
for(var i:int=0;i<array.length;i++)
{
var rand = Math.floor(Math.random() * (i + 1));
var tmp = array[i];
temp[i] = temp[rand];
temp[rand] = tmp;
}
return temp;
}
导入flash.events.Event;
导入flash.net.urloader;
导入flash.net.URLRequest;
var urlRequest:urlRequest=newurlrequest(“test.xml”);
var urlLoader:urlLoader=新的urlLoader();
加载(urlRequest);
urlLoader.addEventListener(Event.COMPLETE、loadComplete、false、0、true);
函数加载完成(evt:事件):无效
{
var xml:xml=newxml(evt.target.data);
trace(generateRandomNodes(xml,3.toString());
}
函数生成器域节点(xml:xml,limit:int):数组
{
变量节点:数组=新数组();
对于每个(xml.children()中的var节点)
{
nodes.push(节点);
}
如果(limit)这个方法很好地工作;在将每个返回的节点值链接到动态文本字段后,是否有方法在其后面添加换行符?在数组中循环时,只需执行tf.appendText(nodes[i]+“\n”);
而不是tf.appendText(nodes[i]);