| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Durchschnitt Registriert seit: Jul 2004
Beiträge: 89
| verschachtelte XML Nodes mit Loop auslesen
Ich möchte ein XML mit allen Verschachtelungen auslesen, und für jeden Node einen MC erstellen. Das Script meiner Vorstellung sieht so aus: ActionScript:
|
| | |
| | #2 (permalink) |
| Durchschnitt Registriert seit: Jul 2004
Beiträge: 89
|
Das war ein bisschen schluddrig von mir, obiges unaufgeräumtes Script zu posten. Hier ein aufgeräumteres Script zur rekursiven Schlaufe. Bricht aber noch immer nach der ersten Schlaufe ab. Weiss jemand wieso?: ActionScript:
Code: <?xml version="1.0" encoding="UTF-8"?> <home id='0_0_0_0' name='Home' x='20' y='300' color='0x000000'> <Label id='1_0_0_0' name='Label 1-0' type='a'> <Label id='1_1_0_0' name='Label 1-1' type='a'> </Label> <Label id='1_2_0_0' name='Label 1-2' type='a'> </Label> <Label id='1_3_0_0' name='Label 1-3' type='a'> </Label> </Label> <Label id='2_0_0_0' name='Label 2-0' type='a'> <Label id='2_1_0_0' name='Label 2-1' type='a'> <Label id='2_1_1_0' name='Label 2-1-1' type='a'> <Label id='2_1_1_1' name='Label 2-1-1-1' type='a'> </Label> </Label> </Label> <Label id='2_2_0_0' name='Label 2-2' type='a'> </Label> <Label id='2_3_0_0' name='Label 2-3' type='a'> </Label> <Label id='2_4_0_0' name='Label 2-4' type='a'> </Label> </Label> <Label id='3_0_0_0' name='Label 3-0' type='a'> <Label id='3_1_0_0' name='Label 3-1' type='a'> </Label> </Label> </home> |
| | |
| | #3 (permalink) |
| muh Registriert seit: Apr 2002 Ort: Freiburg / Stuttgart
Beiträge: 4.338
|
Du hast deine Variablen nicht lokal definiert, also überschreiben sie sich... so gehts: ActionScript:
__________________ »Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!) |
| | |
| | #5 (permalink) |
| FREAK Registriert seit: Jul 2002 Ort: Rheda-Wiedenbrück
Beiträge: 115
|
Hi, das auslesen funktioniert ja super. Aber kann mir mal jemand sagen, wie ich anhand dieses Beispiels die verschiedenen unter-levels in ein verschachteltes Array eintrage? Also z.B. bb = new Array(); bb[0] = 1_0_0_0; bb[0][0] = 1_1_0_0; usw. Danke für die Hilfe! Gruß, mm
__________________ mmgraphics webDesign |
| | |
| | #6 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.324
|
bb = new Array(); bb[0] = new Array(); ... bb[0][0] = new Array(); ...
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #7 (permalink) |
| FREAK Registriert seit: Jul 2002 Ort: Rheda-Wiedenbrück
Beiträge: 115
|
Hallo hgseib, danke für die schnelle Antwort, aber die Definition der Arrrays ist mir schon klar. Mir ist nur unklar, wie ich das Ganze innerhalb der o.g. function runXML mache. Da die Struktur der xml-Datei sich ändern kann, sollte das Array dynamisch erstellt werden, mit allen verschachtelungen. Hast du ne Lösung für o.g. Funktion parat? Wie würdest du das lösen? Mir qualmt echt schon der Schädel, aber ich muss das heute noch irgendwie hinbekommen ... äachz... Danke dir schonmal. Gruß, mm
__________________ mmgraphics webDesign |
| | |
| | #8 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.324
|
sie dir das mal an: http://www.seibsprogrammladen.de/fra...lgorithmen/xml XML parsen und neue arrays setzt du immer dann, wenn du eins brauchst, aber noch keins angelegt wurde. if (! bb[0][0].length) bb[0][0]=[];
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (07-08-2006 um 07:34 Uhr) |
| | |
| | #9 (permalink) |
| FREAK Registriert seit: Jul 2002 Ort: Rheda-Wiedenbrück
Beiträge: 115
|
Mein Problem ist folgendes: mein xml-document sieht in etwa so aus: <nav ...> <menu name="Leistungen" ...> <menu name="Leistungen_a"..> <eintrag name="IT-Security"...></eintrag> <eintrag name="IT-Security2"...></eintrag> </menu> <menu name="Leistungen_b"..> <menu name="Leistungen_b1"...> <eintrag name="IP-Check"...></eintrag> </menu> <eintrag name="IT-Security"...></eintrag> <eintrag name="IT-Security2"...></eintrag> </menu> </menu> </nav> Nur als Beispiel. Die Tiefe des xml-Documents ist hier halt bis 4, kann aber wenn der Kunde selber einträge vornimmt, ggf. auch tiefer werden. Jetzt ist es so, dass ich per flash diesen xml-tree auslesen will, aber die Daten nicht sofort verwenden will, sondern vorerst in einem Multi-Dimensionalen Array ablegen möchte. Also etwas in der Art: nav_arr[0][1][0][1], um z.B. IT-Security2 zu erhalten, oder nav_arr[0][1][0][0], um IT-Security1 zu bekommen. Ich muss also in einer "rekursiven" Abfrage des xml-Dokuments diese Art von Array erhalten. Und genau hier liegt mein Problem. Ich versuche mich schon seit Tagen, habe auch schon mehrfach das Forum hier abgegrast, aber ich finde immer nur Beispiele, die mir bei meinem problem nicht wirklich helfen, oder aber ich habe im Moment nen rostigen Nagel im Kopf ... Ich bekomme es einfach nicht hin! kann mir irgendjemand einen Code-Schnipsel konstruieren, um diese xml-struktur in ein mehrdimensionales Array abzulegen? @hgseib: Vielen Dank für deinen Link zur parseXML, aber ich bekomme einfach nicht das mit dem Array hin. (bin momentan echt zu blöd, wahrscheinlich ist es super einfach, aber ich checks nicht...) Wäre super, wenn mir hier jemand aus der Patsche helfen würde! Beste Grüße, mm
__________________ mmgraphics webDesign |
| | |
| | #10 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.324
|
sorry, wenn du noch nicht mal das einfache beispiel umsetzen kannst? ich kann dir nicht dein programm schreiben. schau mal in der flash-hilfe nach (und auch hier suchen) ob dir: Xpath weiter hilft? "..aber die Daten nicht sofort verwenden will.." du musst das XML nicht komplett in ein array umwandeln. du kannst genausogut deine daten erst dann aus dem XML ziehen, wenn du sie brauchst.
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #11 (permalink) |
| FREAK Registriert seit: Jul 2002 Ort: Rheda-Wiedenbrück
Beiträge: 115
|
ja, jetzt fühl ich mich wirklich doof... danke. Ich will nicht alles gecoded haben, ich muss nur wissen, wie ich wo das Array erstelle und wo ich es verschachtele. Sorry, dass man nicht alles wissen kann, auch wenn es in deinen Augen einfach ist. Aber dafür ist dieses Forum ja da, soweit ich weiss... trotzdem Danke.
__________________ mmgraphics webDesign |
| | |
| | #12 (permalink) |
| muh Registriert seit: Apr 2002 Ort: Freiburg / Stuttgart
Beiträge: 4.338
|
So, hier mal wie ich solche XML-Parser bastle, nach dem Konzept kann man sowas in 5 Minuten runterschreiben. Du kannst den Code in deinen 1. Frame kopieren, und dann mit [strg]+[alt]+[v] angucken, was er gemacht hat. Natürlich musst du es noch anpassen, aber das Prinzip ist immer das gleiche. PHP-Code:
__________________ »Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!) |
| | |
| | #13 (permalink) |
| FREAK Registriert seit: Jul 2002 Ort: Rheda-Wiedenbrück
Beiträge: 115
|
Hi Janoscharlipp! Erst einmal vielen herzlichen Dank für das Beispiel, das du heir gepostet hast!!! Ich habe es mal soweit umgeschrieben, dass ich eine externe xml-datei einlade, um die dann zu parsen. Code: this.xml = new XML();
this.xml.ignoreWhite = true;
this.xml.load("navigation.xml");
this.xml.onLoad = function(status){
if (status){
this.parseXml(this.xml);
//this.parseXML(this.xml);
trace("Daten geladen...");
trace(nav.sub);
}else{
trace("Fehler: Daten konnten nicht geladen werden!");
}
};
this.parseXml = function(xml) {
var data;
var children = xml.childNodes;
var i;
var l = children.length;
for (i = 0; i < l; i++) {
if (children[i].nodeName == "nav") {
data = this.parseNav(children[i]);
break;
}
}
return data;
};
this.parseNav = function(xml) {
var nav = new Object();
nav.sub = new Array();
var children = xml.childNodes;
var i;
var l = children.length;
for (i = 0; i < l; i++) {
if (children[i].nodeName == "menu") {
nav.sub.push(this.parseMenu(children[i]));
} else if (children[i].nodeName == "eintrag") {
nav.sub.push(this.parseEintrag(children[i]));
}
}
return nav;
};
this.parseMenu = function(xml) {
var menu = new Object();
menu.name = xml.attributes.name;
menu.sub = new Array();
var children = xml.childNodes;
var i;
var l = children.length;
for (i = 0; i < l; i++) {
if (children[i].nodeName == "menu") {
menu.sub.push(this.parseMenu(children[i]));
} else if (children[i].nodeName == "eintrag") {
menu.sub.push(this.parseEintrag(children[i]));
}
}
return menu;
};
this.parseEintrag = function(xml) {
var eintrag = new Object();
eintrag.name = xml.attributes.name;
return eintrag;
}; Aber die trace-Anweisung liefert mir trotzdem nur "undefined"... Ich versuche grad herauszufinden, wie ich an die eingelesenen Daten komme... (peinlich) Scheint irgendetwas nicht zu stimmen...
__________________ mmgraphics webDesign |
| | |
| | #14 (permalink) |
| muh Registriert seit: Apr 2002 Ort: Freiburg / Stuttgart
Beiträge: 4.338
|
Du musst auf die Scopes achten, onLoad wird im Sinne des XML-Objekts ausgeführt, da gibt es dann weder this.xml (denn das xml ist einfach nur this), noch gibt es this.parseXml (das ist ja auf _root definiert). PHP-Code:
__________________ »Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!) |
| | |
| | #15 (permalink) |
| FREAK Registriert seit: Jul 2002 Ort: Rheda-Wiedenbrück
Beiträge: 115
|
Ich habe echt nen Nagel im Kopf... wie rufe ich jetzt die Daten von data auf? Bin ich denn heute nur bekloppt? Ich überlege grad, wie die Verschachtelung aussieht.... Gruß, mm
__________________ mmgraphics webDesign |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |