PDA

Volledige versie bekijken : Arrays opstellen adhv xml


davyvh
%Europe/Berlin %857 %2005, 21:34
Hoy,
Kheb een vrij ingewikkeld probleempje met arrays die ik wil opstellen aan de hand van een XML (http://www.davyvh.be/street-racers/menu.xml).
In de XML zie in de eerste childNodes zo iets: <menu name="titel" category="guest">
De titel wordt hieruit gehaald en na die titel staat category. Door middel van die category wordt er onderscheid gemaakt tussen de gebruikers en zal de menu die ik wil verkrijgen er ook anders uitzien. De category kan guest, user of guestAndUser zijn. Het lukt me al om 2 arrays op te stellen gesorteerd op die category. In die array staat dus de titel en de nummer van de childNode.

Hiervoor allemaal geen probleem, maar nu wil ik een submenu bouwen na het klikken op zo'n item van de guest of user array. In die childNodes <menu ...> </menu> zit dus de informatie voor die submenu. Ik zou dus voor iedere childNode een array willen verkrijgen met daarin de informatie voor de sub.

Hieronder het script dat ik al heb:
var xml = "http://www.davyvh.be/street-racers/menu.xml";
_global.arrayGuest = new Array();
_global.arrayUser = new Array();
_global.arraySubs = new Array();

var myMenu:XML = new XML();
myMenu.ignoreWhite = true;
myMenu.onLoad = onLoadHandler;
function onLoadHandler()
{

var root = this.firstChild;
for(var i=0; i<root.childNodes.length; i++)
{
if(root.childNodes[i].attributes.category=="guest" || root.childNodes[i].attributes.category=="guestAndUser")
{
//als de cathegorie guest of guestAndUser is, push dan in de array.
arrayGuest.push(new Array(root.childNodes[i].attributes.name,root.childNodes[i].childNodes[0].firstChild.nodeValue, i));
}else if(root.childNodes[i].attributes.category=="user" || root.childNodes[i].attributes.category=="guestAndUser")
{
arrayUser.push(new Array(root.childNodes[i].attributes.name,root.childNodes[i].childNodes[0].firstChild.nodeValue, i));
}
}
//in onderstaande functie wil ik de subArrays aanmaken, dit mag ook op een andere manier gedaan worden als je er een weet!
//onderstaande functie is totaal verkeerd, maar er staat wel nuttige informatie in die je nog kan gebruiken
function buildSubArray(array)
{
for(var j=0; j<array.length; j++)
{
for(var k=0; k<array[j][2]; k++)
{
//array[j][2] is de rij met daarin de nummers van de childNodes die worden weergegeven in de nodige array
this["arraySubs"+k].push(root.childNodes[k]);
//trace(k);
//trace(root.childNodes[nr].childNodes[array[j].length].attributes.name);
}
}
}
//hier worden de arrays gestart. Als voorbeeld heb ik arrayGuest gekozen om de submenu's op te stellen, later wordt dit dynamisch adhv een login.
buildMenu(arrayGuest);
buildSubArray(arrayGuest);
}
myMenu.load(xml);

Als je mij hiermé kan helpen, RESPECT...
Alvast erg bedankt,
Davy

davyvh
%Europe/Berlin %665 %2005, 16:58
Kan dit nu echt niemand?

Dauntless
%Europe/Berlin %739 %2005, 18:45
Wat dacht je van dit?

#include "lmc_tween.as"
var xml = "http://www.davyvh.be/street-racers/menu.xml";
_global.arrayGuest = new Array ();
_global.arrayUser = new Array ();
_global.arraySubs = new Array ();
var myMenu : XML = new XML ();
var root:XMLNode;
myMenu.ignoreWhite = true;
myMenu.onLoad = onLoadHandler;
function onLoadHandler ()
{
root = this.firstChild;
for (var i = 0; i < root.childNodes.length; i ++)
{
if (root.childNodes [i].attributes.category == "guest" || root.childNodes [i].attributes.category == "guestAndUser")
{
arrayGuest.push (new Array (root.childNodes [i].attributes.name, root.childNodes [i].childNodes [0].firstChild.nodeValue, i));
} else if (root.childNodes [i].attributes.category == "user" || root.childNodes [i].attributes.category == "guestAndUser")
{
arrayUser.push (new Array (root.childNodes [i].attributes.name, root.childNodes [i].childNodes [0].firstChild.nodeValue, i));
}
}
//if(logedIn){ buildMenu(arrayUser) }else{ buildMenu(arrayGuest) }
buildMenu (arrayGuest);
}
myMenu.load (xml);
function buildSubArray (id:Number)
{
arraySubs = new Array();
var xmlN:XMLNode = root.childNodes[id];
for (var j = 0; j < xmlN.childNodes.length; j ++)
{
if(xmlN.childNodes[j].nodeName == "subItem")
{

if(xmlN.childNodes[j].childNodes.length > 0)
{
var mySubs = new Array();
for(var i = 0; i<xmlN.childNodes[j].childNodes.length; i++)
{
mySubs.push({naam:xmlN.childNodes[j].childNodes[i].childNodes[0].childNodes[0].nodeValue, link:xmlN.childNodes[j].childNodes[i].childNodes[1].firstChild.nodeValue})

}
arraySubs.push(mySubs);
} else
{
arraySubs.push(xmlN.childNodes[j].attributes.name);
}

}
}
}
this.createEmptyMovieClip ("holder", 1);
this.holder._y = 100;
var xSpacing = 0;
var standardColor = "0xFFFFFF";
var path : MovieClip = this.holder;
var depth : Number = 2;
var charWidth : Number = 6;
function buildMenu (arrayHeader)
{
for (var i = 0; i < arrayHeader.length; i ++)
{
var mItem : MovieClip = path.attachMovie ("menuItem", "mItem" + i, depth ++);
mItem.id = arrayHeader[i][2];
mItem.clicked = false;
mItem._x = xSpacing ;
xSpacing += findWidth (arrayHeader [i][0]) + 10;
mItem.bg._width = mItem.txt.label._width = findWidth (arrayHeader [i][0]);
mItem.txt.label.text = arrayHeader [i][0];
my_color = new Color (mItem.bg);
my_color.setRGB (standardColor);
var mItem = mItem;
mItem.colorBack = arrayHeader [i][1];
mItem.onRollOver = function ()
{
//this.swapDepths(1);
this.bg.colorTo (this.colorBack, 2, "easeOutElastic");
}
mItem.onRollOut = function ()
{
this.bg.colorTo (standardColor, 2, "easeOutElastic");
}
mItem.link = array [i][1];
mItem.onRelease = function ()
{
//click
if (this.clicked) return;
_root.lastPressed.clicked = false;
_root.lastPressed = this;
this.clicked = true;
//end click
thisColor = new Color (_parent._parent ["mItem" + i].bg)
thisColor.setRGB ("0xff00ff");
clickedBG = new Color (this.bg);
clickedBG.setRGB (standardColor);

/////////////////////////////////////////////////////////////////////////////////////
buildSubArray(this.id);
for(var i = 0; i<arraySubs.length; i++){
trace("Sub "+i+":");
if(arraySubs[i] instanceof Array)
{
trace("\t Deze sub heeft subSubs!");
for(j = 0; j<arraySubs[i].length; j++)
{
trace("\t Sub Sub met naam: "+arraySubs[i][j].naam);
trace("\t Sub Sub met link: "+arraySubs[i][j].link);
trace("");
}
} else {
trace("\t Deze sub heeft GEEN subSubs. Z'n naam is: "+arraySubs[i]);
}
}
}
}
}
function findWidth (item : String) : Number
{
return item.length * charWidth + 10;
}



En als dat niet is wat je bedoelt, heb ik weer een uurtje van m'n leven verspilt :D.
Als het dat wel is: Heb ik nu je respect? :D

davyvh
%Europe/Berlin %834 %2005, 21:01
Fantastisch, helemaal wat ik wou...
Totaly Dauntless ;)

en Respect heb ik voor jou, dat weet je :D

(voor de mensen die niet snappen waar het 2e stuk van de code komt, dat deel heb ik hem zelf gegeven)

Dauntless
%Europe/Berlin %901 %2005, 22:37
Kleine update
#include "lmc_tween.as"
var xml = "http://www.davyvh.be/street-racers/menu.xml";
_global.arrayGuest = new Array ();
_global.arrayUser = new Array ();
_global.arraySubs = new Array ();
var myMenu : XML = new XML ();
var root:XMLNode;
myMenu.ignoreWhite = true;
myMenu.onLoad = onLoadHandler;
function onLoadHandler ()
{
root = this.firstChild;
for (var i = 0; i < root.childNodes.length; i ++)
{
if (root.childNodes [i].attributes.category == "guest" || root.childNodes [i].attributes.category == "guestAndUser")
{
arrayGuest.push (new Array (root.childNodes [i].attributes.name, root.childNodes [i].childNodes [0].firstChild.nodeValue, i));
} else if (root.childNodes [i].attributes.category == "user" || root.childNodes [i].attributes.category == "guestAndUser")
{
arrayUser.push (new Array (root.childNodes [i].attributes.name, root.childNodes [i].childNodes [0].firstChild.nodeValue, i));
}
}
//if(logedIn){ buildMenu(arrayUser) }else{ buildMenu(arrayGuest) }
buildMenu (arrayGuest);
}
myMenu.load (xml);
function buildSubArray (id:Number)
{
arraySubs = new Array();
var xmlN:XMLNode = root.childNodes[id];
for (var j = 0; j < xmlN.childNodes.length; j ++)
{
if(xmlN.childNodes[j].nodeName == "subItem")
{

if(xmlN.childNodes[j].childNodes.length > 0)
{
var mySubs = new Array();
for(var i = 0; i<xmlN.childNodes[j].childNodes.length; i++)
{
mySubs.push({naam:xmlN.childNodes[j].childNodes[i].childNodes[0].childNodes[0].nodeValue, link:xmlN.childNodes[j].childNodes[i].childNodes[1].firstChild.nodeValue})

}
arraySubs.push({naam:xmlN.childNodes[j].attributes.name, subs:mySubs});
} else
{
arraySubs.push(xmlN.childNodes[j].attributes.name);
}

}
}
}
this.createEmptyMovieClip ("holder", 1);
this.holder._y = 100;
var xSpacing = 0;
var standardColor = "0xFFFFFF";
var path : MovieClip = this.holder;
var depth : Number = 2;
var charWidth : Number = 6;
function buildMenu (arrayHeader)
{
for (var i = 0; i < arrayHeader.length; i ++)
{
var mItem : MovieClip = path.attachMovie ("menuItem", "mItem" + i, depth ++);
mItem.id = arrayHeader[i][2];
mItem.clicked = false;
mItem._x = xSpacing ;
xSpacing += findWidth (arrayHeader [i][0]) + 10;
mItem.bg._width = mItem.txt.label._width = findWidth (arrayHeader [i][0]);
mItem.txt.label.text = arrayHeader [i][0];
my_color = new Color (mItem.bg);
my_color.setRGB (standardColor);
var mItem = mItem;
mItem.colorBack = arrayHeader [i][1];
mItem.onRollOver = function ()
{
//this.swapDepths(1);
this.bg.colorTo (this.colorBack, 2, "easeOutElastic");
}
mItem.onRollOut = function ()
{
this.bg.colorTo (standardColor, 2, "easeOutElastic");
}
mItem.link = array [i][1];
mItem.onRelease = function ()
{
//click
if (this.clicked) return;
_root.lastPressed.clicked = false;
_root.lastPressed = this;
this.clicked = true;
//end click
thisColor = new Color (_parent._parent ["mItem" + i].bg)
thisColor.setRGB ("0xff00ff");
clickedBG = new Color (this.bg);
clickedBG.setRGB (standardColor);

/////////////////////////////////////////////////////////////////////////////////////
buildSubArray(this.id);
for(var i = 0; i<arraySubs.length; i++){
trace("Sub "+i+":");
if(arraySubs[i].subs instanceof Array)
{
trace("\t Deze sub heeft subSubs!");
trace("\t en zijn naam is: "+arraySubs[i].naam);
for(j = 0; j<arraySubs[i].subs.length; j++)
{
trace("\t Sub Sub met naam: "+arraySubs[i].subs[j].naam);
trace("\t Sub Sub met link: "+arraySubs[i].subs[j].link);
trace("");
}
} else {
trace("\t Deze sub heeft GEEN subSubs. Z'n naam is: "+arraySubs[i]);
}
}
}
}
}
function findWidth (item : String) : Number
{
return item.length * charWidth + 10;
}