2011-01-18 38 views
0

我對這個難倒...所有我想要的是從顯示在Flash ... 一個XML文件,我可以顯示一個節點罰款隨機節點,但如果試圖顯示2或更多的,閃存棒XML標籤背面上的項目 - 更改以下的urlLoader_complete功能問題,明白我的意思的數量。 這裏是我的AS3:閃光 - XML隨機文本顯示

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; 
} 

和我的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> 

回答

1

嘗試了這一點。

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; 
} 

這將給你一個隨機洗牌的XML節點值的數組。

+0

這精美的作品;是否有一種方法可以在將每個返回的節點值鏈接到動態文本字段後添加換行符? – collin 2011-01-19 14:07:02