2011-01-18 3 views
0

私はこれに困惑しています...私が望むのは、XMLファイルのランダムなノードをFlashで表示することです... 1つのノードを表示できますが、2またはさらに、FlashはXMLタグをアイテムに貼り付けます。urlLoader_complete関数の質問に続く数字を変更して、意味を確認します。Flash - 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

はこれを試してみて は、ここに私のAS3です。

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

+0

配列をループするとき、 'tf.appendText(nodes [i]);' tf.appendText(nodes [i] + "\ n"); –