xml bilder sind undefiniert

S

Spiritmonger

Hi,
ich habe einen Skript geschrieben um externe Bilder per xml auszulesen. das xml is so:
PHP:
<?xml version"1.0"?>
<Bilder>
<Bild name="Bild1" pic="bilder/bild1.jpg"></Bild>
<Bild name="Bild2" pic="bilder/bild2.jpg"></Bild>
<Bild name="Bild3" pic="bilder/bild3.jpg"></Bild>
<Bild name="Bild4" pic="bilder/bild4.jpg"></Bild>
<Bild name="Bild5" pic="bilder/bild5.jpg"></Bild>
<Bild name="Bild6" pic="bilder/bild6.jpg"></Bild>
<Bild name="Bild7" pic="bilder/bild7.jpg"></Bild>
<Bild name="Bild8" pic="bilder/bild8.jpg"></Bild>
<Bild name="Bild9" pic="bilder/bild9.jpg"></Bild>
<Bild name="Bild10" pic="bilder/bild10.jpg"></Bild>
<Bild name="Bild11" pic="bilder/bild11.jpg"></Bild>
<Bild name="Bild12" pic="bilder/bild12.jpg"></Bild>
</Bilder>

Und mein As lautet so:
PHP:
// XML-Objekt erzeugen (Bezeichner: mein_xml)
mein_xml = new XML();
// Störende Leerzeichen ignorieren
mein_xml.ignoreWhite = true;
// XML-Datei einlesen 
mein_xml.load("bilddaten.xml");
// wieviele Bilder pro Seite angezeigt werden
var picsPerPage:Number = 50;
// die Platzhalter fuer die Bilder
var movieclips:Array = new Array(picsPerPage);
//Leere Movieclips erstellen + Position
for (var i = 0, x:Number, y:Number = -120; i<picsPerPage; i++) {
	x = i%4*160;
	if (i%4 == 0) {
		y += 120;
	}
	movieclips[i] = createEmptyMovieClip("mcBild"+i, i);
	movieclips[i]._x = x;
	movieclips[i]._y = y;
	
}
trace(movieclips);

// Funktion, welche die Daten der XML-Datei verarbeitet
function Bilder() {
	bild = mein_xml.firstChild.childNodes[movieclips].attributes.pic;
	bildname = mein_xml.firstChild.childNodes[movieclips].attributes.name;
	loadMovie(bild, movieclips[i]);
	titel_txt.text = bildname;
}
trace(bild);
trace(bildname);

Wenn ich es dann teste kommt kein bild und im Ausgabefenster steht folgendes:
Code:
_level0.mcBild0,_level0.mcBild1,_level0.mcBild2,_level0.mcBild3,_level0.mcBild4,_level0.mcBild5,_level0.mcBild6,_level0.mcBild7,_level0.mcBild8,_level0.mcBild9,_level0.mcBild10,_level0.mcBild11,_level0.mcBild12,_level0.mcBild13,_level0.mcBild14,_level0.mcBild15,_level0.mcBild16,_level0.mcBild17,_level0.mcBild18,_level0.mcBild19,_level0.mcBild20,_level0.mcBild21,_level0.mcBild22,_level0.mcBild23,_level0.mcBild24,_level0.mcBild25,_level0.mcBild26,_level0.mcBild27,_level0.mcBild28,_level0.mcBild29,_level0.mcBild30,_level0.mcBild31,_level0.mcBild32,_level0.mcBild33,_level0.mcBild34,_level0.mcBild35,_level0.mcBild36,_level0.mcBild37,_level0.mcBild38,_level0.mcBild39,_level0.mcBild40,_level0.mcBild41,_level0.mcBild42,_level0.mcBild43,_level0.mcBild44,_level0.mcBild45,_level0.mcBild46,_level0.mcBild47,_level0.mcBild48,_level0.mcBild49
undefined
undefined

Ich hoffe iht könnt mir helfen.
 
Hi,

1. Dein xml-Objekt hat keinen onLoad-Handler: Wenn Du XML.load() ausführst, sind die Daten erst verfügbar, wenn dieser Handler aufgerufen wird. Von dort aus sollte dann die Funktion "Bilder" aufgerufen werden.

2. Ich sehe nicht, dass diese Funktion überhaupt irgendwo aufgerufen wird.

3. Die Funktion "Bilder" muss alle Knoten des xml-Objektes durchlaufen - so, wie der Code bei Dir steht, versuchst Du, ein Array ("movieclips") als Index für die Knoten anzugeben - was nicht funktionieren kann.

Korrekt wäre es in etwa so:
Code:
var xm = new XML();
xm.ignoreWhite = true;
xm.onLoad = function() {
    getPictures(this);
}
xm.load("bilder.xml");

function getPictures(obj) {
   obj = obj.firstChild.childNodes;
   for (var i=0; i<obj.length; i++) {
      x = i%4*160;
      if (i%4 == 0) {
         y += 120;
      }
      movieclips[i] = this.createEmptyMovieClip("mcBild"+i, i);
      movieclips[i]._x = x;
      movieclips[i]._y = y;
      movieclips[i].loadMovie(obj[i].attributes.pic);
   }
}

Gruß
.
 
danke, aber es geht immer noch nicht:
PHP:
var xm = new XML();
xm.ignoreWhite = true;
xm.onLoad = function() {
	getPictures(this);
};
xm.load("bilddaten.xml");
function getPictures(obj) {
	obj = obj.firstChild.childNodes;
	for (var i = 0; i<obj.length; i++) {
		x = i%4*160;
		if (i%4 == 0) {
			y += 120;
		}
	}
	movieclips[i] = this.createEmptyMovieClip("mcBild"+i, i);
	movieclips[i]._x = x;
	movieclips[i]._y = y;
	movieclips[i].loadMovie(obj[i]).attributes.pic;
}
trace(movieclips);
trace(obj);

Immer noch Fehlermeldung, dass movieclips und obj undefiniert sind.
 
Hi,

1. musst Du das Array "movieclips" natürlich zuerst definieren.

2. Dort wo Du Deine trace-Aktionen durchführst, ist selbstverständlich noch alles "undefined", weil weder das xml-Objekte geladen wurde, noch die Funktion "getPictures" ausgeführt wurde. Flash arbeitet in dieser Hinsicht asynchrom, sprich: Es wird nicht gewartet, bis die Daten geladen sind und dann erst die nächste Codezeile ausgeführt, sondern es passiert (in Deinem Script) folgendes:
  • xml-Objekt erstellen

  • xml.load-Methode ausführen

  • Inhalt des Array "movieclips" ausgeben (ist natürlich noch leer)

  • dann sind die Daten irgendwann da und onLoad wird aufgerufen

  • Zuletzt wird dann die Funktion "getPictures" abgearbeitet. Erst dann werden die MovieClips wirklich erstellt und erst dann kannst Du mit trace irgendwas ausgeben. ;)

Gruß
.
 
Habs jetzt so:
PHP:
var xm = new XML();
xm.ignoreWhite = true;
xm.onLoad = function() {
	getPictures(this);
};
movieclips = new Array(50);
xm.load("bilddaten.xml");
function getPictures(obj) {
	obj = obj.firstChild.childNodes;
	for (var i = 0; i<obj.length; i++) {
		x = i%4*160;
		if (i%4 == 0) {
			y += 120;
		}
	}
	movieclips[i] = this.createEmptyMovieClip("mcBild"+i, i);
	movieclips[i]._x = x;
	movieclips[i]._y = y;
	movieclips[i].loadMovie(obj[i]).attributes.pic;
}

aber dann kommt die FehlerMeldung:
Code:
Error opening URL "file:///C|/WINDOWS/Profiles/Spiritmonger/Desktop/dyngalxml/undefined"


Deswegen wollte ich es so machen, aber es geht trotzdem nicht, es kommt dann gar nix mehr:
PHP:
var xm = new XML("bilddaten.xml");
xm.ignoreWhite = true;
xm.onLoad = function() {
	getPictures(this);
};
movieclips = new Array(50);
function getPictures(obj) {
	obj = obj.firstChild.childNodes;
	for (var i = 0; i<obj.length; i++) {
		x = i%4*160;
		if (i%4 == 0) {
			y += 120;
		}
	}
	movieclips[i] = this.createEmptyMovieClip("mcBild"+i, i);
	movieclips[i]._x = x;
	movieclips[i]._y = y;
	movieclips[i].loadMovie(obj[i]).attributes.pic;
}
 
Zuletzt bearbeitet von einem Moderator:
Meinst du so:
PHP:
var xm = new XML("bilddaten.xml");
xm.ignoreWhite = true;
xm.onLoad = function() {
	getPictures(this);
};
movieclips = new Array(50);
function getPictures(obj) {
	obj = obj.firstChild.childNodes;
	for (var i = 0; i<obj.length; i++) {
		x = i%4*160;
		if (i%4 == 0) {
			y += 120;
		}
		movieclips[i] = this.createEmptyMovieClip("mcBild"+i, i);
		movieclips[i]._x = x;
		movieclips[i]._y = y;
		movieclips[i].loadMovie(obj[i]).attributes.pic;
	}
}


Geht trotzdem nicht
 
Lies Dir doch bitte durch, was ich geschrieben habe:
Code:
var xm = new XML("bilddaten.xml");
Wo steht geschrieben, dass man dem Konstruktur des xml-Objektes einen Dateinamen übergeben darf? Wo ist statt dessen Deine load-Methode geblieben?


Code:
movieclips[i].loadMovie(obj[i]).attributes.pic;
Was macht die Klammer nach obj[i] ? Du willst Doch den Inhalt von "obj[i].attributes.pic" laden - daher gehört auch alles das in die Klammer ... (ok, das ist zum Teil mein Fehler, da ich die abschließende Klammer in meinem ersten Posting vergessen habe, aber sie kommt schon ans Ende und nicht mitten in den Ausdruck. ;)

Gruß
.
 
Jetzt gehts, danke.
jetzt will ich es mit de Funktionen belgen und die Bilder richtig positioniern, denn jetzt sind sind nur 4 von 12 zu sehen, und die liegen alle einer einer(Ich vermute das die anderen 8 alle drunter liegen und deswegen nicht sichtbar sind).
Für die funktion habe ich folgendem script, die url ud die bezeichnung wird dann später auch aus dem xml gelesen.
PHP:
var xm = new XML();
xm.ignoreWhite = true;
xm.onLoad = function() {
	getPictures(this);
};
xm.load("bilddaten.xml");
movieclips = new Array(50);
function getPictures(obj) {
	obj = obj.firstChild.childNodes;
	for (var i = 0; i<obj.length; i++) {
		x = i%4*160;
		if (i%4 == 0) {
			y += 120;
		}
		movieclips[i] = this.createEmptyMovieClip("mcBild"+i, i);
		movieclips[i]._x = x;
		movieclips[i]._y = y;
		movieclips[i].loadMovie(obj[i].attributes.pic);
		thumbnail(obj[i]);
		thumbnailover(mobj[i]]);
		thumbnailout(obj[i]);
		thumbnailklick(obj[i]);
	}
}
function thumbnail(clip:MovieClip, bezeichnung:String):Void {
	clip._alpha = 100;
	clip.bezeichnung = bezeichnung;
}
function thumbnailover(clip:MovieClip):Void {
	clip.onRollOver = function() {
		this._alpha = 25;
	};
}
function thumbnailout(clip:MovieClip):Void {
	clip.onRollOut = function() {
		this._alpha = 100;
	};
}
function thumbnailklick(clip:MovieClip):Void {
	clip.onRelease = function() {
		getURL("http://www.google.de");
	};
}
 
Zuletzt bearbeitet von einem Moderator:
Zurück