PDA

Volledige versie bekijken : XML verwerking. Kan dit efficiënter?


gbolssens
%Europe/Berlin %349 %2005, 09:22
Hoi allemaal,

Ik lees een brok XML in uit een php file. Ik kan perfect aan de data uit die XML, maar ik vraag me af of dit niet efficiënter kan. Nu gebruik ik een for in een while in een for:


var myXML:XML = new XML();
myXML.ignoreWhite = true;
myXML.load("http://marvelade.com/phpsql/xml_push.php");
myXML.onLoad = function(success)
{
if(success)
{
for (var lvl=1; lvl<=5; lvl++)
{
rw=1;
// de lus wvoor de <row>-tags moet een while zijn, omdat ik niet weet hoeveel rows er zullen zijn
while (myXML.childNodes[0].childNodes[lvl-1].childNodes[rw-1].hasChildNodes())
{
for (pc=1; pc<=8; pc++)
{
// <game> <level> <row> <piece> <color>
trace(myXML.childNodes[0].childNodes[lvl-1].childNodes[rw-1].childNodes[pc-1].childNodes[0].firstChild.nodeValue);
// <game> <level> <row> <piece> <number>
trace(myXML.childNodes[0].childNodes[lvl-1].childNodes[rw-1].childNodes[pc-1].childNodes[1].firstChild.nodeValue);
}
rw++;
}
}
}
}




Ben zeer benieuwd naar eventuele verbetervoorstellen van de XML kenners (ben zelf nogal XML noob)

greetz,
GB

Roenes
%Europe/Berlin %463 %2005, 12:07
Ik heb het even bekeken en denk dat je toch op 3 loops uitkomt door je geneste tags. Welke loops je daarvoor gebruikt is eigen keus dus daar ga ik niets over zeggen. Wel zou ik de for lusjes wat aanpassen. Je hebt nu hard coded erin gezet hoevaak die moet itereren. Als je nu je xml aanpast moet je ook je code aanpassen. Dat schiet niet op. Vraag daarom steeds de length op van de childnodes waardoor je er dynamisch doorheen kan lopen. Dan kun je ook naar hartenlust je xml aanpassen terwijl je code nog werkt (als je de hierarchie niet aanpast natuurlijk ;))

gbolssens
%Europe/Berlin %464 %2005, 12:09
dus alles met while-loops doen zoals de middelste van de 3?

Roenes
%Europe/Berlin %467 %2005, 12:13
Kan, maar je kan ook een for gebruiken. Even voorbeeld met je 2e lus:
while (myXML.childNodes[0].childNodes[lvl-1].childNodes[rw-1].hasChildNodes())Dit heb jij. Dat kan gewoon. Je kunt ook de length opvragen en die in een for gebruiken (while kan ook, maakt niet uit)
for (var i = 0; i < myXML.childNodes[0].childNodes[lvl-1].childNodes[rw-1].childNodes.length; ++i)Volgens mij was dit het. die childNodes geeft een array van alle nodes binnen die tag en met .length vraag je de lengte van die array op. Werkt dus eigenlijk op dezelfde manier als bij een gewone array :)