Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 03-07-2004, 16:31   #1 (permalink)
Nullblicker
 
Registriert seit: Nov 2003
Beiträge: 123
Fragen zu XML Anbindung

Hi ich hab einige verständnissprobleme zur XML Anbindung.

ich habe folgendes XML Script.

PHP-Code:
_global.dataXML = new XML();
_global.dataXML.ignoreWhite true;
_global.dataXML.onLoad = function(b){
    if (
b)
     {
     
getFromXML();
     }
     else
     {
         
trace("Fehler beim Einlesen der Daten");
    }
}
_global.dataXML.load("daten.xml");
 
function 
getFromXML()
{
    
_global.screenArray = [];
     for (var 
i=0i<_global.dataXML.firstChild.childNodes.lengthi++){ 
        var 
obj = {};
        for(var 
j=0j<_global.dataXML.firstChild.childNodes[i].childNodes.lengthj++){
            
obj["l"] =_global.dataXML.firstChild.childNodes[i].childNodes[j].childNodes[0].firstChild.nodeValue
               
obj["n"] =_global.dataXML.firstChild.childNodes[i].childNodes[j].childNodes[1].firstChild.nodeValue;
               
obj ["c"] = _global.dataXML.firstChild.childNodes[i].childNodes[j].childNodes[2].firstChild.nodeValue;
        }
        
_global.screenArray.push(obj);
    }
    
_global.refreshScreen();

So ich möchte nun, dass das die Daten in ein Accordion geschrieben werden.

Das ganze sieht so aus

PHP-Code:
_global.screenId 0;
_global.screenArray[screen1,screen2];
_global.refreshScreen = function (){
        
tabelle.createSegment(_global.screenArray[_global.screenId].c,_global.screenArray[_global.screenId].l,_global.screenArray[_global.screenId].n);

So ist es nun, dass er mir immer nur das letzte Element aus der jeweiligen screenId Reihe ausgibt, dass liegt daran, dass er ja die objekte immer überschreibt, kann mir einer sagen wie ich es hinbekomme, dass er sie nicht überschreibt, und somit auch richtig ausgibt.

Danke
ZManKay ist offline   Mit Zitat antworten
Alt 03-07-2004, 17:05   #2 (permalink)
Gabber-Freak
 
Registriert seit: Mar 2003
Ort: Sörup / Flensburg
Beiträge: 110
hey, setze den push fürs array in deine for schleife, denn sonst wird es ja nur nach dem letzem durchlauf gespeichert...

ActionScript:
  1. for(var j=0; j<_global.dataXML.firstChild.childNodes[i].childNodes.length; j++){
  2.             obj["l"] =_global.dataXML.firstChild.childNodes[i].childNodes[j].childNodes[0].firstChild.nodeValue;
  3.                obj["n"] =_global.dataXML.firstChild.childNodes[i].childNodes[j].childNodes[1].firstChild.nodeValue;
  4.                obj ["c"] = _global.dataXML.firstChild.childNodes[i].childNodes[j].childNodes[2].firstChild.nodeValue;
  5.         _global.screenArray.push(obj);
  6.         }
__________________
dies ist der anfang vom rest deines lebens
merlinvs ist offline   Mit Zitat antworten
Alt 04-07-2004, 01:05   #3 (permalink)
Nullblicker
 
Registriert seit: Nov 2003
Beiträge: 123
Leider ist das nicht die Lösung.
ZManKay ist offline   Mit Zitat antworten
Alt 04-07-2004, 01:30   #4 (permalink)
lounger one
 
Benutzerbild von linkage
 
Registriert seit: Jul 2002
Ort: Kassel
Beiträge: 556
so könnts gehen:

ActionScript:
  1. _global.dataXML = new XML();
  2. _global.dataXML.ignoreWhite = true;
  3. _global.dataXML.onLoad = function(b){
  4.     if (b)
  5.     {
  6.     getFromXML();
  7.     }
  8.     else
  9.     {
  10.         trace("Fehler beim Einlesen der Daten");
  11.     }
  12. }
  13. _global.dataXML.load("menu.xml");
  14.  
  15. function getFromXML()
  16. {
  17.     _global.screenArray = new Array();
  18.     for (var i=0; i<dataXML.firstChild.childNodes.length; i++){
  19.         var obj = {};
  20.         for(var j=0; j<dataXML.firstChild.childNodes[i].childNodes.length; j++){
  21.             obj["l"] = new Array();
  22.             obj["n"] = new Array();
  23.             obj["c"] = new Array();
  24.             obj["l"] =dataXML.firstChild.childNodes[i].childNodes[j].childNodes[0].firstChild.attributes.AttributName;
  25.             obj["n"] =_global.dataXML.firstChild.childNodes[i].childNodes[j].childNodes[1].firstChild.nodeValue;
  26.             obj["c"] = _global.dataXML.firstChild.childNodes[i].childNodes[j].childNodes[2].firstChild.nodeValue;
  27.             screenArray.push(obj["l"]);
  28.             screenArray.push(obj["n"]);
  29.             screenArray.push(obj["c"]);
  30.         }
  31.     }
  32.     refreshScreen();
  33. }
__________________
your friendly Neighbour

Linkage

m.link@gmx.de
linkage ist offline   Mit Zitat antworten
Alt 04-07-2004, 14:00   #5 (permalink)
Nullblicker
 
Registriert seit: Nov 2003
Beiträge: 123
Leider auch nicht die Lösung, es muss irgendwie gehen, dass er die Werte hintereinander in dem Array speichert.

Wenn ich aber versuche die Objekte mit zusätzlichen Werten zu belegen, dann meldet mir Flash andauernd den Fehler : Dokument undefined

Also das hier will er auch nicht.

PHP-Code:
for(var j=0j<_global.dataXML.firstChild.childNodes[i].childNodes.lengthj++){
            
obj["l"+j] =_global.dataXML.firstChild.childNodes[i].childNodes[j].childNodes[0].firstChild.nodeValue
               
obj["n"+j] =_global.dataXML.firstChild.childNodes[i].childNodes[j].childNodes[1].firstChild.nodeValue;
               
obj ["c"+j] = _global.dataXML.firstChild.childNodes[i].childNodes[j].childNodes[2].firstChild.nodeValue;
        }
        
_global.screenArray.push(obj); 
ZManKay ist offline   Mit Zitat antworten
Alt 04-07-2004, 14:08   #6 (permalink)
lounger one
 
Benutzerbild von linkage
 
Registriert seit: Jul 2002
Ort: Kassel
Beiträge: 556
Hallo, da mein Script bei mir wunderbar funktioniert, denke ich es hat mit deiner XML Struktur zu tun! vielleicht postes du deine files mal dann kann ich Dir sicher weiterhelfen!
__________________
your friendly Neighbour

Linkage

m.link@gmx.de
linkage ist offline   Mit Zitat antworten
Alt 04-07-2004, 14:29   #7 (permalink)
Nullblicker
 
Registriert seit: Nov 2003
Beiträge: 123
Hier ist die Datei hinterlegt,

Suche.zip

Die XML Datei ist die daten.xml

Und der XML Code steht in der Händlersuche2.fla in dem grauen Movieclip (Inhalt_Text) auf der rechten Seite. Dort unter XML und der Aufruf erfolgt ebenfalls in dem Movieclip in der Code Ebene. Das Akkordion heißt "tabelle". Ziel sollte es eigentlich sein, dass ich in dem Textfeld einen Buchstaben eingebe und sich das Accordion dann mit den Städten füllt, welche halt vorher für die jeweilige ScreenId festgelegt wurden
ZManKay ist offline   Mit Zitat antworten
Alt 04-07-2004, 14:48   #8 (permalink)
lounger one
 
Benutzerbild von linkage
 
Registriert seit: Jul 2002
Ort: Kassel
Beiträge: 556
Also, ich kenn mich mit der Accordion Componente nicht aus, aber die Werte lassen sich ohne Problem austrace:

ActionScript:
  1. function getFromXML()
  2. {
  3.     for (var i=_global.wert; i<_global.dataXML.firstChild.childNodes.length; i++){
  4.         for(var j=0; j<_global.dataXML.firstChild.childNodes[i].childNodes.length; j++){
  5.             var l = dataXML.firstChild.childNodes[i].childNodes[j].childNodes[0].firstChild.nodeValue;
  6.          var n = dataXML.firstChild.childNodes[i].childNodes[j].childNodes[1].firstChild.nodeValue;
  7.       var c = dataXML.firstChild.childNodes[i].childNodes[j].childNodes[2].firstChild.nodeValue;
  8.             trace("L: " + l + " | N: " + n + " | C: " + c);
  9.             tabelle.createSegment(c,l,n)
  10.         }
  11.     }
  12. }
__________________
your friendly Neighbour

Linkage

m.link@gmx.de
linkage ist offline   Mit Zitat antworten
Alt 04-07-2004, 15:07   #9 (permalink)
Nullblicker
 
Registriert seit: Nov 2003
Beiträge: 123
So würde es funktionieren, wenn ich nur einmal das Akkordion aufrufen möchte. aber da ja in dem XML File mehrere verschiedene, Stadtdaten sind, die zu verschiedenen Zeitpunkten aufgerufen werden sollen, geht es so nicht, da er wenn ich alle Städte in das File packe auch direkt alle Städte in das Akkordion packt und somit das Akkordion überfüllt ist.

Wenn Du das "trace" mal aus der 2. For Schleife in die Äussere setzt, bleiben dann nur noch die letzten der gespeicherten Objekte drin.

Geändert von ZManKay (04-07-2004 um 15:16 Uhr)
ZManKay ist offline   Mit Zitat antworten
Alt 04-07-2004, 15:15   #10 (permalink)
lounger one
 
Benutzerbild von linkage
 
Registriert seit: Jul 2002
Ort: Kassel
Beiträge: 556
ok, verstanden, dann müssen wir mit einem Array arbeiten! hmmm.... ich überlege mir da mal was!

Nur zum Verständnis, bei der Eingabe eines Buchstabens sollen alle Städte mit entsprechendem Anfangsbuchstaben gezeigt werden?
__________________
your friendly Neighbour

Linkage

m.link@gmx.de

Geändert von linkage (04-07-2004 um 15:21 Uhr)
linkage ist offline   Mit Zitat antworten
Alt 04-07-2004, 15:28   #11 (permalink)
Nullblicker
 
Registriert seit: Nov 2003
Beiträge: 123
Yep, das sieht man noch in der Code Ebene, da hatte ich es mit verschiedenen Akkordions probiert, bis ich auf die Idee kam es mit XML zu machen.
ZManKay ist offline   Mit Zitat antworten
Alt 05-07-2004, 18:51   #12 (permalink)
Nullblicker
 
Registriert seit: Nov 2003
Beiträge: 123
Also Problem gelöst.

So geht es:

PHP-Code:
function getFromXML()
{
    
_global.screenArray = [];
     for (var 
i=0i<_global.dataXML.firstChild.childNodes.lengthi++){ 
        var 
obj = {};
        for(var 
j=0j<_global.dataXML.firstChild.childNodes[i].childNodes.lengthj++){
            var 
j+1;
            
obj["l"+x] =_global.dataXML.firstChild.childNodes[i].childNodes[j].childNodes[0].firstChild.nodeValue
               
obj["n"+x] =_global.dataXML.firstChild.childNodes[i].childNodes[j].childNodes[1].firstChild.nodeValue;
               
obj ["c"+x] = _global.dataXML.firstChild.childNodes[i].childNodes[j].childNodes[2].firstChild.nodeValue;
        }
        
_global.screenArray.push(obj);
    }
    
_global.refreshScreen();

Das Problem war, dass ich im Code immernoch die Variablen direkt ausgeben wollte, also c,l,n und vergessen hab, die Endungen mit anzuhängen, daher gab er logischerweise immer undefined aus.

PHP-Code:
_global.screenId 0;
_global.screenArray[screen1,screen2];
_global.refreshScreen = function (){
    for(var 
p=p<=14p++){
        
tabelle.createSegment(_global.screenArray[_global.screenId]["c"+p],_global.screenArray[_global.screenId]["l"+p],_global.screenArray[_global.screenId]["n"+p]);
    }

Danke nochmal für Deine Hilfe
ZManKay ist offline   Mit Zitat antworten
Alt 05-07-2004, 19:16   #13 (permalink)
lounger one
 
Benutzerbild von linkage
 
Registriert seit: Jul 2002
Ort: Kassel
Beiträge: 556
fein, hatte leider zuviel um die Ohre um Dir zu Antworten!
Aber: selbst gelernt ist eh am besten!
__________________
your friendly Neighbour

Linkage

m.link@gmx.de
linkage 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 12:33 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele