Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29-12-2003, 10:56   #1 (permalink)
#no.991 @ MM
 
Benutzerbild von hugeinc
 
Registriert seit: Apr 2003
Ort: München
Beiträge: 327
Probleme beim Auslesen von XML Inhalten

Hi zusammen,
kaum ist Weihnachten vorbei, gehts schon wieder an die Arbeit...
Ich habe ein Problem mit dem Auslesen von XML Inhalten.
Vielleicht erstmal mein Aufbau:

<content>
<hintergrund backswf="test1.swf"/>
<inhalt backswf="test2.swf"/>
</content>

Mein AS:
ActionScript:
  1. myXML = new XML();
  2. myXML.ignoreWhite = true;
  3. myXML.load("data.xml");
  4. myXML.onLoad = function(status) {
  5.     // wenn fertig geladen
  6.     if (status) {
  7.         xmldata = myXML.firstChild.childNodes;
  8.         delete myXML;
  9.         createBackground();
  10.     }
  11. }
  12. function createBackground() {
  13.     bg = xmldata[0].attributes.backswf;
  14.     loadMovie(bg, "bgMainvisual");
  15. }
Soweit sogut.
Das funktioniert auch schön.
Was ich jetzt möchte, ist, dem NodeNamen "hintergrund" das entsprechnde swf (hier: test1.swf) dynamisch zuordnen.
d.h. in der Funktion createBackground soll das XML gecheckt werden, ob es, ich sag mal eine ID "hintergrund" enthält und wenn ja, dann das entsprechende SWF laden.
trace(myXML.firstChild.nodeName) ergibt ja den allerersten Namen (=content).
Nur wie komme ich an den Eintrag "hintergrund"??
Hoffe, ich habe mich einigermassen verständlich ausgedrückt ;-)

Greets, Micha
__________________
Arbeit ist keine Lösung...
hugeinc ist offline   Mit Zitat antworten
Alt 29-12-2003, 11:05   #2 (permalink)
...
 
Registriert seit: Oct 2002
Ort: Nürnberg
Beiträge: 3.611
Re: Probleme beim Auslesen von XML Inhalten

Zitat:
Geschrieben von hugeinc

Nur wie komme ich an den Eintrag "hintergrund"??
ActionScript:
  1. // Nodename
  2. myXML.firstChild.childNodes[0].nodeName;
  3. // Bg-Wert
  4. myXML.firstChild.childNodes[0].attributes.backswf

thorben.schmitt ist offline   Mit Zitat antworten
Alt 29-12-2003, 11:32   #3 (permalink)
#no.991 @ MM
 
Benutzerbild von hugeinc
 
Registriert seit: Apr 2003
Ort: München
Beiträge: 327
Hi Thorben,
danke erstmal für die schnelle Hilfe.
Nur hatte ich versucht, das XML nach dem nodeNamen "hintergrund" zu durchsuchen und falls dieser vorhanden ist, dann das entsprechnde SWF zu laden.
Eidiwei das XML ja auch so aussehen könnte:

<content>
<inhalt backswf="test2.swf"/>
<hintergrund backswf="test1.swf"/>
</content>

Das heisst, ich weiss nie, an welcher Stelle die entsprechnde Zuordnung auftaucht.
Versucht hatte ich das so (was aber 2x undefined anzeigt):

ActionScript:
  1. myXML = new XML();
  2. myXML.ignoreWhite = true;
  3. myXML.load("data.xml");
  4. myXML.onLoad = function(status) {
  5.     if (status) {
  6.         xmldata = myXML.firstChild.childNodes;
  7.         delete myXML;
  8.         initAnzahl();
  9.         createBackground();
  10.     }
  11. }
  12.  
  13. function initAnzahl() {
  14.     anzahl = xmldata.length;
  15.     maxAnzeige = xmldata.length;
  16.     aktAnzeige = 0;
  17. }
  18.  
  19. function createBackground() {
  20.     for (i=aktAnzeige; i<maxAnzeige; i++) {
  21.         trace(xmldata.firstChild.childNodes[i].nodeName);
  22.         //  if (xmldata.firstChild.childNodes[i].nodeName == "hintergrund") {
  23.         //  bg = xmldata[0].attributes.backswf;
  24.         //  loadMovie(bg, "bgMainvisual");
  25.     }
  26. }

Greets, Micha
__________________
Arbeit ist keine Lösung...
hugeinc ist offline   Mit Zitat antworten
Alt 29-12-2003, 11:48   #4 (permalink)
...
 
Registriert seit: Oct 2002
Ort: Nürnberg
Beiträge: 3.611
Habe dir mal eine kl. Function geschrieben, welche überprüft ob ein bestimmter Knoten existiert:
ActionScript:
  1. var l_xml = new XML();
  2. l_xml.ignoreWhite = true;
  3. l_xml.load("data.xml");
  4. l_xml.onLoad = function() {
  5.     chekIfNodeExists(this.childNodes[0].childNodes, "hintergrund") ? trace("gefunden") : trace("nicht gefunden");
  6. };
  7. function chekIfNodeExists(search, node_name) {
  8.     for (var o = 0; o<search.length; o++) {
  9.         if (search[o].nodeName == node_name) {
  10.             return 1;
  11.         }
  12.     }
  13.     return 0;
  14. }
Bei Fragen fragen
thorben.schmitt ist offline   Mit Zitat antworten
Alt 29-12-2003, 12:42   #5 (permalink)
#no.991 @ MM
 
Benutzerbild von hugeinc
 
Registriert seit: Apr 2003
Ort: München
Beiträge: 327
Komisch, komisch.
ich hatte dir grad was gepostet und es ist nix eingetragen worden ?? ;-(

Na ja, dann nochmal...

Also. Erstmal ist das ne sehr feine Idee, so die Konten zu checken.

Wenn ich das in mein AS einbaue, müsste es ja so aussehen:
ActionScript:
  1. myXML = new XML();
  2. myXML.ignoreWhite = true;
  3. myXML.load("data.xml");
  4. myXML.onLoad = function(status) {
  5.     if (status) {
  6.         xmldata = myXML.firstChild.childNodes;
  7.         delete myXML;
  8.         createBackground();
  9.     }
  10. }
  11.  
  12. function chekIfNodeExists(search, node_name) {
  13.     for (var o = 0; o<search.length; o++) {
  14.         trace(o)
  15.         if (search[o].nodeName == node_name) {
  16.             return 1;
  17.         }
  18.     }
  19.     return 0;
  20. }
  21.  
  22. function createBackground() {
  23.     chekIfNodeExists(this.childNodes[0].childNodes, "hintergrund");
  24.        
  25.         // hier müsste doch jetzt die Zuordnung passieren, oder?
  26.        
  27.         // bg = xmldata[0].attributes.backswf;
  28. // also das Attribut von dem entsprechenden Kontenpunkt
  29.         // loadMovie(bg, "bgMainvisual");
  30. }
Aber wie du wahrscheinlich siehst, bekomme ich es nicht hin, das entsprechende Attribut zuzufügen, wenn "hintergrund existiert.

Grets, Micha
__________________
Arbeit ist keine Lösung...
hugeinc ist offline   Mit Zitat antworten
Alt 29-12-2003, 13:08   #6 (permalink)
...
 
Registriert seit: Oct 2002
Ort: Nürnberg
Beiträge: 3.611
so müsste es gehen:

ActionScript:
  1. var l_xml = new XML();
  2. l_xml.ignoreWhite = true;
  3. l_xml.load("data.xml");
  4. l_xml.onLoad = function(success) {
  5.     success ? createBackground() : trace("Fehler beim laden");
  6. };
  7. // gibt die Position zurück, wenn nicht vorhanden 0
  8. function chekIfNodeExists(search, node_name) {
  9.     for (var o = 0; o<search.length; o++) {
  10.         if (search[o].nodeName == node_name) {
  11.             return o;
  12.         }
  13.     }
  14.     return 0;
  15. }
  16. function createBackground() {
  17.     var content = l_xml.childNodes[0].childNodes;
  18.     var checkExist = chekIfNodeExists(content, "hintergrund");
  19.     if (checkExist != 0) {
  20.         var bg = content[checkExist].attributes.backswf;
  21.         bgMainvisual.loadMovie(bg, "bgMainvisual");
  22.     } else {
  23.         trace("kein BG gefunden");
  24.     }
  25. }
thorben.schmitt ist offline   Mit Zitat antworten
Alt 29-12-2003, 13:30   #7 (permalink)
#no.991 @ MM
 
Benutzerbild von hugeinc
 
Registriert seit: Apr 2003
Ort: München
Beiträge: 327
Cool. MEGACOOL!!

Ha - aber ich wär nicht ich, wenn ich da nicht noch ein paar Fragen zu hätte ;-))
(Nicht allzu erst nehmen )

Ich fang mal hinten an:
In der Zeile:
bgMainvisual.loadMovie(bg, "bgMainvisual");
reicht doch eigentlich: bgMainvisual.loadMovie(bg)
oder? Geht doch auch so.

Dann vielleicht das wichtigste.
Du schreibst in der xml.onLoad Funktion, dass nach erfolgreichem laden der Background erstellt wird.
Frage: wo liegt der Grund, dass es in dieser Funktion passieren muss und nicht z.B. in der "function createBackground()"
Versteh mich nicht falsch, dass ist keine Kritik!!
Mich würde nur der Grund interssieren, warum in der onLoad Funktion.

Nochmals 1000 Dank für deine Hilfe.

By the way. Kurz eine kleine Anekdote.
Arbeitest du mit MX 2004 Pro?
Ich hatte zuerst die englische Version 7.0.1 und kam u.a. nicht mit der englischen Hilfe zurecht. Dazu startete das Programm erst nach 74sec !!!
Hab dann bei MM nachgefragt und die haben mir gesagt, ich sollte die deutsche Version 7.1.1 downloaden, die Registriernummer von 7.0.1en zurückgeben, english deinstallieren, deutsch installieren und mit meiner engl. Serial die deutsche freischalten lassen. Funktioklappelt.
So was nenn ich Kundendienst!!

Greets, Micha
__________________
Arbeit ist keine Lösung...
hugeinc ist offline   Mit Zitat antworten
Alt 29-12-2003, 13:43   #8 (permalink)
...
 
Registriert seit: Oct 2002
Ort: Nürnberg
Beiträge: 3.611
zu1:
ActionScript:
  1. bgMainvisual.loadMovie(bg)
genügt, hab ich vergessen rauszunehmen

zu2:
onLoad ist ein Event und keine richtige Function. dh. du musst flash ja mitteilen, wann das XML geladen ist.
-> onLoad wird ausgeführt, wenn XML geladen ist, dann wird createBackground() aufgerufen.

ansonsten wird createBackground() aufgerufen, obwohl die XML-Daten noch nicht bereitstehen.


zu3:
habe z.Z. noch MX, 2004 liegt aber auf dem Schreibtisch.
Ist noch nicht installiert, da ich gerdae von pc auf mac wechsle.

Software ist da, rechner aber noch nicht
thorben.schmitt ist offline   Mit Zitat antworten
Alt 29-12-2003, 13:51   #9 (permalink)
#no.991 @ MM
 
Benutzerbild von hugeinc
 
Registriert seit: Apr 2003
Ort: München
Beiträge: 327
zu 2:
ich Depp, was frag ich so blöd.
Das hatte ich ja in meinem allersten Script ja auch drin.

>mac
Auch haben will ;-))

Greets, Micha

P.S. Für deine Hilfe.
Wenn du mal nen einigermassen guten mp3 Player brauchst, bitte schön
Das Ding ist aber noch weiter ausbaufähig. Bin dran....
__________________
Arbeit ist keine Lösung...
hugeinc ist offline   Mit Zitat antworten
Alt 29-12-2003, 17:08   #10 (permalink)
#no.991 @ MM
 
Benutzerbild von hugeinc
 
Registriert seit: Apr 2003
Ort: München
Beiträge: 327
Sorry, wenn ich mich nochmal melde.
Bitte frag nicht wieso.
Es funktioniert auf einmal nicht mehr.
Es ist alles da. Das xml, das swf, was geladen werden soll.
Ich kapiers nicht
Ich habs mal hierhin gelegt (78kB gezipped).
Magst du vielleicht nochmal schaun?

Greets, Micha
__________________
Arbeit ist keine Lösung...
hugeinc ist offline   Mit Zitat antworten
Alt 29-12-2003, 17:40   #11 (permalink)
...
 
Registriert seit: Oct 2002
Ort: Nürnberg
Beiträge: 3.611
mach mal -1 statt 0
ActionScript:
  1. function createBackground() {
  2.     var inhalt = myXML.childNodes[0].childNodes;
  3.     var checkExist = checkIfNodeExists(inhalt, "background");
  4.     trace(checkExist)
  5.     if (checkExist != -1) {
  6.         var bg = inhalt[checkExist].attributes.backswf;
  7.         bgMainvisual.loadMovie(bg);
  8.     } else {
  9.         trace("kein BG gefunden");
  10.     }
  11. }
  12. function checkIfNodeExists(search, node_name) {
  13.     for (var b = 0; b<search.length; b++) {
  14.         if (search[b].nodeName == node_name) {
  15.             return b;
  16.         }
  17.     }
  18.     return -1;
  19. }
war ein kl. fehler, da die position von
<background backswf="tischfussball.swf"/>
ja auf 0 war
thorben.schmitt ist offline   Mit Zitat antworten
Alt 29-12-2003, 17:55   #12 (permalink)
#no.991 @ MM
 
Benutzerbild von hugeinc
 
Registriert seit: Apr 2003
Ort: München
Beiträge: 327
Jau.
Thats it
Ich frag mich nur, wieso es vorher ging

Na ja, 1000 Dank.

Werd jetzt versuchen, die drag&drop Geschichte noch was zu vereinfachen, bzw. in Funktionen zu legen.

Bis dann, Micha
__________________
Arbeit ist keine Lösung...
hugeinc ist offline   Mit Zitat antworten
Alt 29-12-2003, 17:58   #13 (permalink)
...
 
Registriert seit: Oct 2002
Ort: Nürnberg
Beiträge: 3.611
Zitat:
Geschrieben von hugeinc

Ich frag mich nur, wieso es vorher ging
lag warscheinlich daran, dass das xml so aussah (background an zweiter stelle)
PHP-Code:
<content>
    <
navigation office="bla bla"/>
       <
background backswf="tischfussball.swf"/> 
</
content
thorben.schmitt ist offline   Mit Zitat antworten
Alt 29-12-2003, 18:01   #14 (permalink)
#no.991 @ MM
 
Benutzerbild von hugeinc
 
Registriert seit: Apr 2003
Ort: München
Beiträge: 327
Gut möglich.
Aber das war ja eigentlich auch der Sinn der Sache, das die Bezeichnung "background" variabel liegen kann.
Deswegen ja die "checkIfNodeExists" Funktion.

Micha
__________________
Arbeit ist keine Lösung...
hugeinc 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 02:38 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele