Piotr
Danielewicz
front-end developer,
Media 4 U
Temat: [AS3] Rekurencja i XML
Czołem.Mam problem z rekurencją podczas czytania xmla. Jak dedukuję to coś zrąbałem ;)
Dlatego prosiłbym Was o pomoc, ew. o podpowiedź jaka inną ścieżkę obrać.
Teraz XML:
<dane>
<katalog nazwa="katalog produktów">
<wpis nazwa="main 1">
<wpis nazwa="sub 1" znaczek="">
<wpis nazwa="sub sub 1" znaczek="">
<opis><![CDATA[asd fas df asdf asdf asd fas]]></opis>
</wpis>
<wpis nazwa="sub sub 1" znaczek="">
<opis><![CDATA[asd fas df asdf asdf asd fas]]></opis>
</wpis>
</wpis>
</wpis>
<wpis nazwa="main 2">
</wpis>
<wpis nazwa="main 3">
<wpis nazwa="sub 1" znaczek="">
<wpis nazwa="sub sub 1" znaczek="">
<opis><![CDATA[asd fas df asdf asdf asd fas]]></opis>
</wpis>
</wpis>
</wpis>
</katalog>
</dane>
Uprościłem nieco, ale generalnie chodzi o zagnieżdżenia.
Teraz kod AS
function xmlLoaded(e:Event):void {
xml = XML(e.target.data);
katalog = xml.katalog
drillDown(katalog)
}
function drillDown(_data:XMLList){
for(a = 0; a<_data.wpis.length(); a++){
if(_data.wpis[a].length()>0){
drillDown(_data.wpis[a].wpis)
}
}
}
Zasada działania jest prosta: do funkcji przekazuję XMLList i tam w pętli sprawdzam czy jest interesująca mnie gałąź <wpis> czy nie. jeśli jest to wiadomo, jeszcze raz wywołuję funkcję itd.
Teraz są problemy dwa
1. Skrypt mi się zawiesza ;) z powodu zbyt długiego oczekiwania i/lub mielenia
2. Jeśli już sobie pobiorę nazwy i wyświetlę je w liście to jak pobrać dane miejsce w xmlu z konkretnym zagłębieniem? Jakieś countery czy coś?
PS. Pomyślałem sobie, że zrobię tego xmla na zasadzie wpis pod wpisem i dam tylko id i parent. Wtedy nie będzie problemów.
Tak czy siak dobrze by było wiedzieć czemu nie działa ;)
Dzięki za podpowiedzi :)