Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 16-05-2007, 05:22   #1 (permalink)
Neuer User
 
Benutzerbild von canon
 
Registriert seit: Aug 2006
Beiträge: 230
Question flashstar - xml laden as optimieren

hallo forum!

ich hab hier über das forum ein tolles tutorial von "flashstar" gefunden in dem ein xml text geladen wird.
da ich das ganze jetzt mit zwei xml dateien in verschiedenen mc's benutze
kamen bei mir 2 fragen dazu auf:

frage 1:
ist es möglich news2.xml erst zu laden wenn news1.xml fertig geladen ist?


frage 2:
bis auf meinXML.load("news1.xml") bzw. meinXML.load("news2.xml") ist das AS bei beiden gleich. deshalb meine frage: kann man da nicht den AS block für beide benutzen?
(irgendwie so in den mc's nur noch das meinXML.load("news1.xml") nötig ist)

hier mal das ganze AS:
ActionScript:
  1. meinXML = new XML();
  2. //
  3. meinXML.load("news1.xml");
  4. //
  5. meinXML.ignoreWhite = true;
  6. meinXML.onLoad = function(status) {
  7.     if (status) {
  8.         tempXML = meinXML.firstChild.childNodes;
  9.         titel = tempXML[0].attributes.titel;
  10.         datum = tempXML[0].attributes.datum;
  11.         verweis = tempXML[0].attributes.url;
  12.         autor_mc.gotoAndStop(tempXML[0].attributes.autor);
  13.         delete meinXML;
  14.     }
  15. };
  16. aktNews = 0;
  17. aktNewsNr = aktNews+1;
  18. this.onEnterFrame = function() {
  19.     if (aktNews<tempXML.length-1 && signal) {
  20.         aktNews++;
  21.         aktNewsNr = aktNews+1;
  22.         titel = tempXML[aktNews].attributes.titel;
  23.         datum = tempXML[aktNews].attributes.datum;
  24.         verweis = tempXML[aktNews].attributes.url;
  25.         autor_mc.gotoAndStop(tempXML[aktNews].attributes.autor);
  26.         signal = 0;
  27.         clearInterval(iv);
  28.     }
  29.     if (aktNews>=tempXML.length-1 && signal) {
  30.         aktNews = -1;
  31.         aktNewsNr = 1;
  32.     }
  33. };

hab auch mal direkt ein aufgeräumtes beispiel angehangen. würde mich über tipps sehr freuen!

schönen tag! canon
Angehängte Dateien
Dateityp: zip xmlTickerFin.zip (32,2 KB, 7x aufgerufen)
canon ist offline   Mit Zitat antworten
Alt 16-05-2007, 07:26   #2 (permalink)
Pending…
 
Benutzerbild von psyk
 
Registriert seit: Jul 2002
Ort: Hamburg
Beiträge: 3.866
Lege das Ganze in eine Funktion ruf dann nachdem fertig laden des
ersten nochmals auf.

PHP-Code:
var xmlSuccess1 false;
var 
xmlSuccess2 false;
myLoad("news1.xml");

function = 
myLoadurl ) { ...
   
meinXML.loadurl );
   
meinXML.onLoad = function(status
   {
      if (
status
      {
         if( !
xmlSuccess1 // wenn erste gelanden
         
{
            
xmlSuccess1 true;
            
_root.myLoad"news2.xml" );
         }
         else 
xmlSuccess2 true// setzt beide auf geladen
         // etc. ... 
__________________
:: Warum einfach, wenn's auch kompliziert geht! ::

Geändert von psyk (16-05-2007 um 20:19 Uhr)
psyk ist offline   Mit Zitat antworten
Alt 16-05-2007, 20:14   #3 (permalink)
Neuer User
 
Benutzerbild von canon
 
Registriert seit: Aug 2006
Beiträge: 230
hi!
danke damit wäre meine frage 1 schon mal abgehackt!


hat jemand denn auch eine antwort zu meiner frage 2:?
bis auf meinXML.load("news1.xml") bzw. meinXML.load("news2.xml") ist das andere AS bei beiden gleich. deshalb meine frage: kann man da nicht das AS für beide benutzen?
(irgendwie so das in den mc's nur noch das meinXML.load("news1.xml") nötig ist - siehe angehangendes beispiel)

wäre doch super wenn man sich die 35 zeilen code in beiden für beide sparen könnte!

mfg
canon
Angehängte Dateien
Dateityp: zip xmlTickerFin-2.zip (19,5 KB, 1x aufgerufen)
canon ist offline   Mit Zitat antworten
Alt 16-05-2007, 20:16   #4 (permalink)
Pending…
 
Benutzerbild von psyk
 
Registriert seit: Jul 2002
Ort: Hamburg
Beiträge: 3.866
Meine Lösung umfasst beide Fragen.
__________________
:: Warum einfach, wenn's auch kompliziert geht! ::
psyk ist offline   Mit Zitat antworten
Alt 16-05-2007, 21:05   #5 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.137
Ich habe mal eine OOP-Lösung dazu geschrieben:
ActionScript:
  1. /** */
  2. class MyXML extends XML {
  3.     /** */
  4.     private var files:Array;
  5.     /** */
  6.     private var index:Number;
  7.     /** */
  8.     public function MyXML(files:Array) {
  9.         trace("class MyXML: constructor");
  10.         this.index = 0;
  11.         this.files = files;
  12.         this.init();
  13.     }
  14.     /** */
  15.     public function init() {
  16.         trace("class MyXML: function init");
  17.         this.load(files[index]);
  18.     }
  19.     /** */
  20.     public function onLoad(success:Boolean) {
  21.         trace("class MyXML: listener onLoad");
  22.         if (success) {
  23.             this.parseFile(this);
  24.             this.index++;
  25.             if (this.index<this.files.length) {
  26.                 this.load(files[index]);
  27.             }
  28.         } else {
  29.             trace("class MyXML: listener onLoad - an error occured: no file '"+files[index]+"' found.");
  30.             this.index++;
  31.             if (this.index<this.files.length) {
  32.                 this.load(files[index]);
  33.             }
  34.         }
  35.     }
  36.     /** */
  37.     public function parseFile(xml:XML):Void {
  38.         trace("class MyXML: function parseFile");
  39.         if (this.index == 0) {
  40.             this.parseFirstFile(xml);
  41.         } else if (this.index == 1) {
  42.             this.parseSecondFile(xml);
  43.         } else if (this.index == 2) {
  44.             this.parseThirdFile(xml);
  45.         }
  46.     }
  47.     /** */
  48.     public function parseFirstFile(xml:XML):Void {
  49.         trace("class MyXML: function parseFirstFile");
  50.         trace(xml);
  51.     }
  52.     /** */
  53.     public function parseSecondFile(xml:XML):Void {
  54.         trace("class MyXML: function parseSecondFile");
  55.         trace(xml);
  56.     }
  57.     /** */
  58.     public function parseThirdFile(xml:XML):Void {
  59.         trace("class MyXML: function parseThirdFile");
  60.         trace(xml);
  61.     }
  62. }
Hier die Initialisierung des Objektes:
ActionScript:
  1. var myxml:MyXML = new MyXML(new Array("xml1.xml", "xml2.xml", "xml3.xml"));
Es ist kaum ein Unterschied zu dem, was in ActionScript 1 passiert, nur dass alles etwas besserer strukturiert ist, und Scope Probleme wegfallen. Da du nur einen Parse-Vorgang hast, reicht bei dir die Verarbeitung in parseFile:
ActionScript:
  1. /** */
  2. public function parseFile(xml:XML):Void {
  3.     trace("class MyXML: function parseFile");
  4.     trace(xml);
  5. }
In dem Fall werden alle drei Dateien per XML ausgelesen obwohl du nur eine Funktion hast. Du musst die Daten aber in einer neuen datenstruktur übertragen/verarbeiten, da nach jedem neuen load() der Inhalt des Objektes überschrieben wird.

Anwendung (Flash 8) und Code + XML-Dateien im Attachment
Angehängte Dateien
Dateityp: zip Successive_XML_Loading.zip (6,7 KB, 12x aufgerufen)
Omega Psi ist offline   Mit Zitat antworten
Alt 16-05-2007, 21:41   #6 (permalink)
Pending…
 
Benutzerbild von psyk
 
Registriert seit: Jul 2002
Ort: Hamburg
Beiträge: 3.866
Du hast scheinbar viel zu viel Zeit.

Hübsch, hübsch.



psyk
... der auch schon auf rise of the silver surfer freut
__________________
:: Warum einfach, wenn's auch kompliziert geht! ::

Geändert von psyk (17-05-2007 um 02:56 Uhr)
psyk ist offline   Mit Zitat antworten
Alt 17-05-2007, 02:39   #7 (permalink)
Neuer User
 
Benutzerbild von canon
 
Registriert seit: Aug 2006
Beiträge: 230
hallo zusammen!

also die lösung von Omega Psi ist mir als anfänger viel zu viel. ich blicke schon nicht bei der vermeitlich "einfacheren" variante vom psyk richtig durch!

ich hab probiert das AS einzubauen und bekomme immer den fehler:

PHP-Code:
**Fehler** Symbol=TypoClipEbene=ActionsBild=1:Zeile 8Funktionsname erwartet
     
function = myLoadurl ) { 
was hab ich da falsch gemacht?

mfg
Angehängte Dateien
Dateityp: zip xmlTickerFin-psyk.zip (14,2 KB, 2x aufgerufen)
canon ist offline   Mit Zitat antworten
Alt 17-05-2007, 02:52   #8 (permalink)
Pending…
 
Benutzerbild von psyk
 
Registriert seit: Jul 2002
Ort: Hamburg
Beiträge: 3.866
Ich wollte mir ja eigentlich das ganze Geschreibe sparen.

PHP-Code:
var xmlSuccess1 false;
var 
xmlSuccess2 false;
xmlLoad"news1.xml" );

function 
xmlLoadurl 
{
    var 
meinXML = new XML();
    
//
    
meinXML.loadurl );
    
//
    
meinXML.ignoreWhite true;
    
meinXML.onLoad = function(status
    {
        if (
status
        {
            if( !
xmlSuccess1 // wenn erste gelanden
            
{
            
xmlSuccess1 true;
            
_root.myLoad"news2.xml" );
            }
            else 
xmlSuccess2 true// setzt beide auf geladen

            
tempXML meinXML.firstChild.childNodes;
            
titel tempXML[0].attributes.titel;
            
datum tempXML[0].attributes.datum;
            
verweis tempXML[0].attributes.url;
            
autor_mc.gotoAndStop(tempXML[0].attributes.autor);
            
delete meinXML;
        }
    };
    
aktNews 0;
    
aktNewsNr aktNews+1;
    
this.onEnterFrame = function() 
    {
        if (
aktNews<tempXML.length-&& signal
        {
            
aktNews++;
            
aktNewsNr aktNews+1;
            
titel tempXML[aktNews].attributes.titel;
            
datum tempXML[aktNews].attributes.datum;
            
verweis tempXML[aktNews].attributes.url;
            
autor_mc.gotoAndStop(tempXML[aktNews].attributes.autor);
            
signal 0;
            
clearInterval(iv);
        }
        
        if (
aktNews>=tempXML.length-&& signal
        {
            
aktNews = -1;
            
aktNewsNr 1;
        }
    };

__________________
:: Warum einfach, wenn's auch kompliziert geht! ::

Geändert von psyk (17-05-2007 um 02:57 Uhr)
psyk ist offline   Mit Zitat antworten
Alt 17-05-2007, 08:08   #9 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.137
ActionScript:
  1. var counter:Number = 0;
  2. var urls:Array = new Array("xml1.xml", "xml2.xml", "xml3.xml");
  3. var xml:XML = new XML();
  4. xml.ignoreWhite = true;
  5. xml.onLoad = function(success:Boolean) {
  6.     trace("listener onLoad called");
  7.     if (success) {
  8.         parseXML(this);
  9.         counter++;
  10.         if (counter<urls.length) {
  11.             this.load(urls[counter]);
  12.         }
  13.     } else {
  14.         trace("No files found.");
  15.     }
  16. };
  17. xml.load(urls[counter]);
  18. /** */
  19. function parseXML(xml:XML) {
  20.     trace("function parseXML() called");
  21.     trace(xml);
  22. }
Hier die Ausgabe meiner Testdateien.
Zitat:
listener onLoad called
function parseXML() called
<?xml version="1.0" encoding="utf-8"?><test id="1">Dies ist der erste Test.</test>
listener onLoad called
function parseXML() called
<?xml version="1.0" encoding="utf-8"?><test id="2">Dies ist der zweite Test.</test>
listener onLoad called
function parseXML() called
<?xml version="1.0" encoding="utf-8"?><test id="3">Dies ist der dritte Test.</test>
Das ganz ist eigentlich sehr einfach gehalten:
  1. Zähler deklarieren und initialisieren: Zeile 1
  2. Array deklarieren und initialisieren, in dem die Pfade zu den XML-Dateien gespeichert sind: Zeile 2
  3. XML-Objekt deklarieren, initialisieren und konfigurieren. Dazu gehören auch die Listener: Zeile 3-5
  4. In der onLoad() wird nun nach erfolgreichem Ladevorgang (Start des Ladevorganges Zeile 17) die Funktion parseXML() aufgerufen. Da diese in deinem Fall immer gleich ist, muss nur noch dein Code eingefügt werden.
  5. Nach der Verarbeitung der XML-Daten wird der Zähler hochgezählt und falls das Ende des Array noch nciht erreicht ist, wird die nächste Referenz auf eine Datei geladen und ein weiteres mal XML.load() ausgeführt. Das ganze passiert dann so oft, wie Dateien im Array referenziert werden.
ToDos:
  • Sollen verschiedene Dateien geladen werden, kann man mit Hilfe des counter Fallunterscheidungen machen.
  • Fehlerbehandlungen: wenn keine Dateigefunden wurde - nächste Datei laden?
Angehängte Dateien
Dateityp: zip Successive_XMLLoading_Simple.zip (4,7 KB, 7x aufgerufen)
Omega Psi ist offline   Mit Zitat antworten
Alt 18-05-2007, 03:28   #10 (permalink)
Neuer User
 
Benutzerbild von canon
 
Registriert seit: Aug 2006
Beiträge: 230
wow erstmal vielen dank an euch beiden für die tolle hilfe bisher!

ich hab nur noch eine frage:
wenn ich die xml dateien dann in der root timeline vorgeladen habe - wie weise ich den geladenen inhalt dann auf die textfelder der verschiedenen mc's zu?

(ich hoffe ich hab das nicht übersehen - ist halt alles noch etwas zu heavy für mich )

mfg

Geändert von canon (18-05-2007 um 03:29 Uhr)
canon 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:56 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele