Flash - случайное отображение текста в формате XML - PullRequest
0 голосов
/ 19 января 2011

Я озадачен этим ... Все, что я хочу, это отобразить случайный узел из файла XML во Flash ... Я могу нормально отобразить один узел, но если попытаться отобразить 2 или более, Flash вставит теги XMLвернуться к пунктам - измените число после вопросов в функции urlLoader_complete, чтобы понять, что я имею в виду.Вот мой AS3:

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 Ответ

1 голос
/ 19 января 2011

Попробуйте это.

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...