Aus XML-Datei nur bestimmte Einträge darstellen

mardazad

Erfahrenes Mitglied
Hallo Allerseits,
sorry für den Titel des Threads, aber ich weiss nicht wie ichs besser beschreiben soll...

Also ich habe folgendes Problem und hoffe jemand kann mir weiterhelfen.

Ein XML-File (gallery.xml) mit diesem Aufbau:

PHP:
<descr="bild nummero uno" abteilung1="1" abteilung2="0" abteilung3="0" />
<descr="bild nummero due" abteilung1="0" abteilung2="1" abteilung3="0" />
<descr="bild nummero tres"  abteilung1="0" abteilung2="0" abteilung3="1" />
<descr="bild nummero quatro"  abteilung1="1" abteilung2="1" abteilung3="0" />

wird so in Flash geparst:

PHP:
// xml parsen	
	
var images = new Array();

var xm = new XML();
xm.ignoreWhite = true;
xm.onLoad = function() {
	parse(this);
}
xm.load("gallery.xml");

function parse(obj) {
	for (var i=0; i<obj.childNodes.length; i++) {
		var node = obj.childNodes[i];
		
		images[i] = new Object();
		images[i].descr = node.attributes.descr;
		images[i].abteilung1 = node.attributes.abteilung1;
		images[i].abteilung2 = node.attributes.abteilung2;
		images[i].abteilung3 = node.attributes.abteilung3;
	}
	thumbnails.init(); //thumbnails = mc-instanz
}


im MC thumbnails wird dann initialisiert:

PHP:
function init() {
	
	for (var i=0; i<gal_root.images.length; i++) {
		
		thumb[i] = this.attachMovie("thumb", "thumb" + i, i);
		thumb[i]._y = i * hspace;
		thumb[i].idx = i;  // idx für clickImage in der Hauptzeitleiste
	} 
	this.onEnterFrame = function() {
		nextOne();
		delete this.onEnterFrame;
	}
}


Soweit klappt auch alles wunderbar. Mein Problem ist nun, dass ich in der Funktion init() nur thumbnails für Einträge anlegen will, die im childnode "abteilung1" den Wert 1 haben.
Das heisst, die Nodes, die unter "abteilung1" den Wert 0 haben, sollen ignoriert werden...
Ich möchte also die Thumbnails danach sortieren, ob der jeweilige Wert für Abteilung1, ...-2, ...-3 true oder false ist.

Es müsste demnach sinngemäss sowas stattfinden: for (var i=0; i<gal_root.images.length gal_root.xm.childNodes[i].attributes.abteilung1 == 1; i++) {

aber ich weiss nicht, wie man das in der korrekten Syntax schreibt...

Kann mir da bitte jemand helfen?
Vielen Dank schonmal
 
Hi,

Du könntest das Array "images" nach dem Member "abteilung1" sortieren lassen, aber ich bin mir nicht sicher, ob es das ist, was Du willst. Wenn Du einfach alle Bilder mit "abteilung1" = 0 nicht anzeigen willst, wäre das eine simple if-Abfrage in der Funktion init(), und würde keine Sortierung erfordern ...

Gruß
.
 
Hi Tobi,
Danke schonmal. Mit ner if-Abfrage hab ichs auch probiert, aber nicht richtig hinbekommen. Es wurde nurnoch der erste Eintrag aus dem XML-Dokument angezeigt, Eintrag4 nicht...

Wie müsste den die Abfrage richtig aussehen? Vielleicht bin ich zu blöd oder betriebsblind, aber wie gesagt hauts bei mir nicht hin...

vG
 
Hi,

erst einmal würde ich die Attribute als Zahlen (und nicht als Strings) speichern:
Code:
function parse(obj) {
    for (var i=0; i<obj.childNodes.length; i++) {
        var node = obj.childNodes[i];
        
        images[i] = new Object();
        images[i].descr = node.attributes.descr;
        images[i].abteilung1 = parseInt(node.attributes.abteilung1, 10);
        images[i].abteilung2 = parseInt(node.attributes.abteilung2, 10);
        images[i].abteilung3 = parseInt(node.attributes.abteilung3, 10);
    }
    thumbnails.init(); //thumbnails = mc-instanz
}

Dann könnte die Funktion init so aussehen:
Code:
function init() {
    var c = 0;
    for (var i=0; i<gal_root.images.length; i++) {
        if (gal_root.images[i].abteilung1) {
                thumb[ c] = this.attachMovie("thumb", "thumb" + c, c);
                thumb[ c]._y = c * hspace;
                thumb[ c].idx = c; 
                c ++;
        }
    } 
    this.onEnterFrame = function() {
        nextOne();
        delete this.onEnterFrame;
    }
}

Gruß
.
 
Hi,
super schonmal - vielen Dank. Ich glaube alleine wäre ich nicht so weit gekommen...

Allerdings hab ich jetzt das Problem, dass in der Funktion init() die falschen thumbs generiert werden. Es gibt bspw. 4 Nodes im XML-File, bei denen Abteilung1 true ist, nach der jetztigen Funktion werden auch nur 4 thumbs erzeugt. Allerdings sind das die Thumbs zu den ersten 4 Einträgen im XML und nicht die Thumbs zu denjenigen Einträgen, bei denen die if-abfrage rsp. abteilung1 true ist...
Also ich hab immerhin kapiert, dass das mit c=0 und [ i ] zusammenhängt. Allerdings keine Lösung hingekriegt.

Kann mir da bitte jemand helfen?
vG
 
Hi,
habe das Problem jetzt so gelöst:

PHP:
function init() {

	var c=0;
	var hordis=0;
	
	for (var i=0; i<gal_root.images.length; i++) {
		
		if(gal_root.images[i].abteilung1){
			
		thumb[ c] = this.attachMovie("thumb", "thumb" + c, c);
		thumb[ c]._y = hordis * hspace;
		thumb[ c].idx = c;  // idx für clickImage in der Hauptzeitleiste
		c++;
		hordis++;
		}
		else{
			thumb[ c] = this.attachMovie("thumb", "thumb" + c, c);
			thumb[ c]._visible = false;
			thumb[ c].idx = c; 
			c++;}
			
	}
	
	this.onEnterFrame = function() {
		nextOne();
		delete this.onEnterFrame;
	}
}

Das scheint mir aber sehr unelegant zu sein. Gibts da nicht noch nen besseren Weg?

vG
 
Hi,

wie ich das sehe, müsstest Du nur in meinem Code die Zeile:
Code:
thumb[ c].idx = c;
so umändern:
Code:
thumb[ c].idx = i;

Mir war zuvor nicht klar, wie die Bildereinträge Deinen Thumbnails zugeordnet werden. Wenn das über den Index "idx" geht, ist es so, wie oben beschrieben.

Gruß
.
 
*kopfklatsch - klar, Danke schön. Hatte es sogar ausprobiert, aber an anderer Stelle ne Abfrage ob die Anzahl der Thumbs der Anzahl der nodes entspricht... Blöde.

Vielen Dank!
 

Neue Beiträge

Zurück