Aus XML Datei ausgelesenes Array weiterverarbeiten

Doni2007

Grünschnabel
Hallo zusammen, ich versuche seit einiger Zeit vergeblich ein Array das ich mit dem Inhalt aus einer XML Datei gefüllt habe weiter zu verarbeiten (für eine Slideshow).

Ich bekomme aber immer nur undefined angezeigt wenn ich auf den Wert des Array ausserhalb der onLoad funktion zugreifen möchte. Ich würde es aber gerne ausserhalb dieser Funktion weiterverarbeiten können.

Bsp.:

Code:
myxml = new XML();
myxml.ignoreWhite = true;
myxml.onLoad = function(success) {
	if(success) {
		for (var i=0; i<myxml.firstChild.childNodes.length; i++) {			images[i] = this.firstChild.childNodes[i].firstChild.firstChild;
		}
		
		} else {trace("Fehler beim Laden der XML datei")}     }
myxml.load("bilder.xml");
//Hier sollte dann die Weiterverarbeitung beginnen:
// Beispielsweise trace(images[i]);

für Tipps oder Anregungen wäre ich sehr dankbar !!
 
Hi und willkommen im Forum,

die Weiterverarbeitung muss aus der onLoad-Funktion angestoßen werden.

Grund: ActionScript-Code wird Zeile für Zeile abgearbeitet, wobei nicht auf das Laden irgendwelcher Daten gewartet wird. An der Stelle, wo Du die Weiterverarbeitung vornehmen willst (auf der Zeitleiste unterhalb der onLoad-Methode), ist die Datei höchstwahrscheinlich noch nicht geladen.

So müsste es korrekt aussehen:
Code:
myxml = new XML();

myxml.ignoreWhite = true;

myxml.onLoad = function(success) {
  if(success) {
    for (var i=0; i<myxml.firstChild.childNodes.length; i++) {
      images[i] = this.firstChild.childNodes[i].firstChild.firstChild;
    }
    weiterverarbeiten();
  } else {
    trace("Fehler beim Laden der XML datei")
  }
}

myxml.load("bilder.xml");

function weiterverarbeiten() {
  for (var i in images) {
    trace(images[i]);
}

Gruß
.
 
jetzt habe ich leider ein weiterführendes Problem mit loadClip, und zwar wenn ich ich direkt mit var images = new Array("bild1","bild2" ...usw. arbeite funktioniert die loadClip Funktion einwandfrei, aber wenn ich wie zuvor schon angefragt das Array aus einer XML Datei erstelle und damit weiterarbeiten möchte klappt das nicht. Wieso

Bsp::
Code:
//var images = new Array("bild1.jpg", "bild2.jpg", "bild3.jpg", "bild4.jpg", "bild5.jpg")
var images:Array = new Array();
var img:Array = new Array(); 
var mcl = new MovieClipLoader(); // MovieClipLoader um die Bilder zu laden

myxml = new XML();
myxml.ignoreWhite = true;
myxml.onLoad = function(success) {
  if(success) {
    for (var i=0; i<myxml.firstChild.childNodes.length; i++) {
      images[i] = this.firstChild.childNodes[i].firstChild.firstChild;
    }
    weiterverarbeiten();
  } else {
    trace("Fehler beim Laden der XML datei")
  }
}

myxml.load("bilder.xml");

function weiterverarbeiten() {

mcl.onLoadInit = function() { // wird aufgerufen, wenn ein Bild geladen wurde
	trace("ok. hat geklappt");
	}
	trace(images.length);
for (var i=0; i<images.length; i++) {
img[i] = this.createEmptyMovieClip("img" + i, i); // Für jedes Bild einen MC erstellen
var ct = img[i].createEmptyMovieClip("ct", 1); // ... und dort einen weiteren leeren MC hineinpacken
//img[i]._visible = false; // Bild erstmal ausblenden
mcl.loadClip(images[i], ct); // Bilddatei vom MovieClipLoader in den Container laden lassen
}

}

könnte mir da noch jemand weiterhelfen
 
Hi,

bitte rücke Deinen Code ein und formatier ihn mit CODE-Tags. So kann man das ja kaum lesen. ;)

Dein Problem habe ich nicht ganz verstanden - poste am besten mal Deine .fla und die XML-Datei als Anhang.

Gruß
.
 
Nun habe ich mal beide Dateien angehangen,

also wenn ich die obere (auskommentierte Zeile) direkt verwende var images = new Array("bild1.jpg"...) dann funktioniert alles einwandfrei (habe den unteren Slideshow Teil übrigens hier von diesem Forum),

aber wenn ich versuche den Inhalt für das Array images aus einer XML Datei auszulesen und zu füllen, klappt die weitere Verarbeitung nicht mehr.

in der Hoffnung auf eine Lösung

gruß

Doni2007
 

Anhänge

  • slide.zip
    5,9 KB · Aufrufe: 14
Ich habe hier nochmal das Script besser formatiert eingefügt,
also wenn ich das array mittels XML erzeuge funktioniert die Bildausgabe nicht !
aber wenn ich aber die obere Zeile entkommentiere und dafür die:
Code:
 images = this.firstChild.childNodes.firstChild.firstChild; auskommentiere funktioniert es, wieso ?
PHP:
//var images = new Array("bild1.jpg", "bild2.jpg", "bild3.jpg", "bild4.jpg", "bild5.jpg", "bild6.jpg", "bild7.jpg", "bild8.jpg", "bild9.jpg", "bild10.jpg", "bild11.jpg", "bild12.jpg", "bild13.jpg", "bild14.jpg"); // Array mit den Bildpfaden
var images:Array = new Array();
var img:Array = new Array(); 
var mcl = new MovieClipLoader(); 

myxml = new XML();
myxml.ignoreWhite = true;
myxml.onLoad = function(success) {
  if(success) {
	  
    for (var i=0; i<myxml.firstChild.childNodes.length; i++) {
           images[i] = this.firstChild.childNodes[i].firstChild.firstChild;
    }
	
    weiterverarbeiten();
		
  	} else {
    	trace("Fehler beim Laden der XML datei")
  }
}

myxml.load("bilder.xml");

function weiterverarbeiten() {
	
	this.createEmptyMovieClip("bild_mc",this.getNextHighestDepth());
	trace(images[0]); // trace gibt bild1.jpg aus
	//mcl.loadClip(images[0], bild_mc);    //funktioniert nicht
	mcl.loadClip("bild1.jpg", bild_mc);  //funktioniert
}


Inhalt der bilder.xml Datei:
Code:
<?xml version="1.0" ?>
<bilder>
        <bild>
             <bildname>bild1.jpg</bildname>
             <bildbeschreibung>bla bla<bildbeschreibung>
        </bild>
        <bild>
             <bildname>bild2.jpg</bildname>
             <bildbeschreibung>bla bla</bildbeschreibung>
        </bild>

        usw.
        .........
</bilder>
bin für jede Hilfe dankbar !
 
Hi,

ich hatte bislang leider noch keine Zeit, mir die Datei anzusehen, aber probier mal:
Code:
images[i] = this.firstChild.childNodes[i].firstChild.firstChild.nodeValue,
oder
Code:
images[i] = this.firstChild.childNodes[i].firstChild.firstChild.toString();

Grund: das Objekt "firstChild" ist vom Typ XMLNode, der MovieClipLoader erwartet aber einen String.

Gruß
.
 
Eigene Dummheit, Problem hat sich erledigt, hab den dummen Fehler gefunden,
habe die XML Knoten falsch ausgelesen.

Lösung:
Code:
this.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue;
 
Zurück