Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 13-06-2004, 15:59   #1 (permalink)
hmmmmm...
 
Benutzerbild von kenichi
 
Registriert seit: Feb 2004
Ort: deutschland
Beiträge: 112
Post XML und Rekursion

Hi alle zusammen,

hab da mal ein kleines Problem...
Ich will eine XML-Datei (unbekannter Form und Groesse) einlesen, um daraus ein Baumdiagramm, zur schicken Visualisierung, zu erzeugen.
Deshalb muss ich die Datei auch komplett auslesen.

Grundsaetzlich dachte ich, dass das kein Problem darstellt, bis Flash anfing mir die Arbeit mit meiner rekursiven Funktion zu verweigern, bzw. irgendwie klappt das nicht.
Jetzt hoffe ich, dass mir einer von euch weiterhelfen kann.

Dies ist meine Code mit Rekursion...
PHP-Code:
path_origin "this.firstChild";

xml_tree = new XML();
xml_tree.ignoreWhite true;
xml_tree.load("test.xml");

xml_tree.onLoad = function()
{
    function 
search(path)
    {
        
trace(eval(path).nodeName);
        if( eval(
path).hasChildNodes() )
        {
            for( 
i=0i<eval(path).childNodes.lengthi++ )
            {
                
search(path ".childNodes[" "]");
            }
        }
    }

    
search(path_origin);

Dies ist eine zugehoerige Beispiel XML-Datei:
Code:
<father>
	<child01>
		<grandchild01>
			<grandgrandchild01></grandgrandchild01>
			<grandgrandchild02></grandgrandchild02>
		</grandchild01>
		<grandchild02>
			<grandgrandchild03></grandgrandchild03>
			<grandgrandchild04></grandgrandchild04>
		</grandchild02>
	</child01>
	<child02>
		<grandchild03>
			<grandgrandchild05></grandgrandchild05>
			<grandgrandchild06></grandgrandchild06>
		</grandchild03>
		<grandchild04>
			<grandgrandchild07></grandgrandchild07>
			<grandgrandchild08></grandgrandchild08>
		</grandchild04>
	</child02>
</father>
Die Ausgabe in Flash ist folgende:
Code:
father
undefined
undefined
Und jetzt frage ich mich wieso das nicht klappt.
Hab ich vielleicht was an der Rekursion falsch gemacht?

Danke schon mal im Voraus.
Gruss,
kenichi
kenichi ist offline   Mit Zitat antworten
Alt 13-06-2004, 17:14   #2 (permalink)
hmmmmm...
 
Benutzerbild von kenichi
 
Registriert seit: Feb 2004
Ort: deutschland
Beiträge: 112
also,
ich glaube ich habe jetzt eine erklaerung dafuer gefunden, warum das nicht hin haut...
und zwar kommt, wie ich glaube, die funktion "eval()" nicht mit feldern klar.
also "eval()" kommt an seine grenzen, wenn es den ausdruck "this.firstChild.childNodes[0]" auswerten soll.

sieht jemand dafuer vielleicht ne alternative?

gruss + dank,
kenichi
kenichi ist offline   Mit Zitat antworten
Alt 13-06-2004, 18:09   #3 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
lass des eval einfach weg, eval ist evel.

Du kannst doch statt
PHP-Code:
search(path ".childNodes[" "]"
auch
PHP-Code:
search(path.childNodes[i]); 
schreiben.

und statt
PHP-Code:
search(path_origin); 
machste
PHP-Code:
search(this.firstChild); 
Janoscharlipp ist offline   Mit Zitat antworten
Alt 13-06-2004, 22:55   #4 (permalink)
hmmmmm...
 
Benutzerbild von kenichi
 
Registriert seit: Feb 2004
Ort: deutschland
Beiträge: 112
@ Janoscharlipp

danke, das wars.
wie konnte ich nur den wald vor lauter baeumen nicht sehen??? naja, ist ja meistens so.

die einlesefunktion sieht jetzt so aus:
PHP-Code:
xml_tree.onLoad = function()
{
    
path this.firstChild;
    
    function 
search(path)
    {
        
trace(path.nodeName);
        if(
path.hasChildNodes())
        {
            for(
i=0i<path.childNodes.lengthi++)
            {
                
search(path.childNodes[i]);
            }
        }
    }

    
search(path);

und irgendwie ist auch schon das naechste problem aufgetaucht...
die ausgabe laute nun:
Code:
father
child01
grandchild01
grandgrandchild01
grandgrandchild02
das ist schon mal ganz gut aber irgendwie fehlt da noch was!
die rekursion fuehrt die angefangenen "for"-schleifen nicht zu ende.
ich schaetze das liegt daran, dass der "path" nicht mehr stimmt fuer die jeweilige "for"-schleife. hat jemand vielleicht ne idee dazu parat?

dank + gruss
kenichi
kenichi ist offline   Mit Zitat antworten
Alt 13-06-2004, 23:02   #5 (permalink)
flashed Dude
 
Benutzerbild von tolleiv
 
Registriert seit: Mar 2002
Ort: _level0
Beiträge: 1.402
hallo

ja das hat was damit zu tun das i keine lokale variable ist und deshalb global hochgezählt wird

so gehts :

PHP-Code:
xml_tree.onLoad = function() 

    
path this.firstChild
     
    function 
search(path
    { 
        var 
i;
        
trace(path.nodeName); 
        if(
path.hasChildNodes()) 
        { 
            for(
i=0i<path.childNodes.lengthi++) 
            { 
                
search(path.childNodes[i]); 
            } 
        } 
    } 

    
search(path); 

mfg
__________________
Die Basis unseres Denkens ist das der Verstand sich selbst erkennt.
Kyle Broslovski


Eigenlob stinkt ~ fast immer
tolleiv ist offline   Mit Zitat antworten
Alt 13-06-2004, 23:14   #6 (permalink)
hmmmmm...
 
Benutzerbild von kenichi
 
Registriert seit: Feb 2004
Ort: deutschland
Beiträge: 112
@ tolleiv

super, das klappt.
man heute habe ich echt ein brett vorm kopf, aber das muss am vielen bier liegen...
schliesslich haben frankreich und england ja ein amuesantes spiel geliefert!

hab auch zeitgleich zu dir eine andere loesung gefunden, allerdings ist da dann die ausgabe umgedreht.

PHP-Code:
xml_tree.onLoad = function()
{
    
path this.firstChild;
    
    function 
search(path)
    {
        
trace(path.nodeName);
        if(
path.hasChildNodes())
        {
            
i=0
            
for(i in path.childNodes)
            {
                
search(path.childNodes[i]);
                
i++;
            }
        }
    }

    
search(path);

aber deine loesung schiesst natuerlich den vogel ab..
diese kleine woertchen var macht den unterschied.
Code:
for(var i=0; i<path.childNodes.length; i++)
haette ich wirklich selbst drauf kommen koennen, da ich sonst immer mit var arbeite, um mein "i" lokal zu halten...

danke nochmal.
gruss,
kenichi
kenichi ist offline   Mit Zitat antworten
Alt 11-07-2004, 11:50   #7 (permalink)
hmmmmm...
 
Benutzerbild von kenichi
 
Registriert seit: Feb 2004
Ort: deutschland
Beiträge: 112
hallo,

mittlerweile ist der code fuer die rekursive funktion etwas schoener geworden.
PHP-Code:
xml_tree = new XML();
xml_tree.ignoreWhite true;
xml_tree.load("test.xml");

xml_tree.onLoad = function() {
    function 
search(pathdepthid_number) {
        if(
path.hasChildNodes()) {
            for(var 
i=0i<path.childNodes.lengthi++) {
                
search(path.childNodes[i], depth+1i+1);
            }
        }
    }
    
search(this.firstChild,1,1);

leider habe ich immernoch das problem, dass ich keine idee habe, wie ich den xml-baum darstellen soll.
es soll halt fuer jeden node eine mc (zb. ein rechteck) platziert werden.
ABER WIE??
ich habe mir schon naechtelang den kopf darueber zerbrochen.
vielleicht hat jemand schon mal etwas aenliches gemacht oder auch einfach nur so die rettende idee...

gruss,
kenichi
__________________
Visit Amakiir.net - WoW Community and more!
kenichi ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 14:07 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele