Flashhilfe.de - Flash Community

Probleme bei Texte aus XML dynamisch auslesen [Flash CS4]

 


AntwortenRegistrieren Seite1 2 3 4 5 6 7  

Purgar#62
Benutzerbild von Purgar
Beiträge: 151
Registriert: May 2010

Themenautor/in

12.01.2011, 17:30

ich versuche gerade, dass zu verschateln..aber echt, das ist verdammt schwer..für mich
RustyCake#63
Benutzerbild von RustyCake
Beiträge: 1776
Wohnort: Laimbach 6 1/2
Registriert: Nov 2002

12.01.2011, 17:32

Sag ja, wenn es nicht vorgegeben ist, eine xml zu verwenden, dann nimm zwei, ist eh sauberer.
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muss erst gehen lernen"
Purgar#64
Benutzerbild von Purgar
Beiträge: 151
Registriert: May 2010

Themenautor/in

12.01.2011, 17:35

ah ok..und wie lade ich die zweite? bin gerade echt etwas durchn wind..versuche hier schon seit etlichen stunden das irgendwie hinzubekommen
RustyCake#65
Benutzerbild von RustyCake
Beiträge: 1776
Wohnort: Laimbach 6 1/2
Registriert: Nov 2002

12.01.2011, 17:54

So wie Du geladen hast mit der ersten xml, nur das Du die Ladeprozedur der xml, in eine Funktion stellst, der Funktion übergibst Du den Link zur jeweiligen xml, alles andere läuft wie gehabt.
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muss erst gehen lernen"
Purgar#66
Benutzerbild von Purgar
Beiträge: 151
Registriert: May 2010

Themenautor/in

12.01.2011, 18:00

oh ok..eigentlich würd ich lieber mit einer xml arbeiten..aber ich versuchs gleich mal
Purgar#67
Benutzerbild von Purgar
Beiträge: 151
Registriert: May 2010

Themenautor/in

12.01.2011, 19:21

also ich würd es doch lieber mit einer xml machen...man ist das nervenaufreibend ;-)
RustyCake#68
Benutzerbild von RustyCake
Beiträge: 1776
Wohnort: Laimbach 6 1/2
Registriert: Nov 2002

12.01.2011, 20:00

Wenn ich es verstehen würde, warum es unbedingt eine xml sein muss, aber ich checks nicht, warum Du Dir mehr Arbeit machen möchtest wie nötig.
Vor allem wenn du gleich gesagt hättest, das Du auf sowas raus willst, hätten wir das von Anfang an anders anpacken können.
Jetzt im nach hinein ist das schwer, weil Du alle Zugriffs-Punkte im script editieren mußt!
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muss erst gehen lernen"
badskill#69
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

12.01.2011, 23:58

Ich klinke mich mal hier mit rein. Ich hab mir jetzt nicht alles durchgelesen, aber soweit wie ich das mitbekomme, geht es hier hauptsächlich darum, wie man auf die Daten zugreift.
Meine Antwort ist jetzt auch keine Antwort auf hier auftretende Fragen, sondern eher als kleine Inspiration gedacht, wie man Schnittstellen für einen einfachen Zugriff auf die Daten erstellt.
Allen beteiligten ist ja klar, dass die Daten aus der XML in eine Datenstruktur überführt werden müssen, die einen einfachen und intuitiven Zugriff auf die Daten bietet. Lose im Code verteilte Arrays sind dafür nur sehr bedingt geeignet, zumal dadurch auch ein zentraler Zugriffspunkt fehlt. Was also fehlt ist ein Objekt, welches Methoden beinhaltet, die jeder bedienen kann, ohne etwas über die interne Datenstruktur wissen zu müssen. In einem Satz ausgedrückt: Wir brauchen eine API.

Ausgehend von der vorliegenden XML (id-Angaben ohne führende Nullen: "01" = "1"), lässt sich eine Struktur dieser Art aufbauen:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
function parseXML(xml:XML):Object
{
     var data:Object = model();
     
     for each (var year:XML in xml.jahr)
     {
        var yearItem:Object = {};
        yearItem.name = year.@year;
        yearItem.id = year.@id;
        data.addYear(yearItem);
        
        for each (var gallery:XML in year.gallery)
        {
           var galleryItem:Object = {};
           galleryItem.title = gallery.@titel;
           galleryItem.id = gallery.@id;
           galleryItem.image = gallery.@bild;
           galleryItem.yearId = yearItem.id;
           data.addGallery(galleryItem);
           
           for each (var image:XML in gallery.image)
           {
              var imageItem:Object = {};
              imageItem.src = image.@src;
              imageItem.url = image.@url;
              imageItem.galleryId = galleryItem.id;
              data.addImage(imageItem);
           }
        }
     }
     
     return data;
}

var model:Function = function():Object
{
     var years:Array = [];
     var galleries:Array = [];
     var images:Array = [];
     
     var imagesByGallery:Function = function():Array
     {
        var result:Array = [];
        for each (var image:Object in images)
        {
           if (image.galleryId == this.id) result.push(image);
        }
        return result;
     }
     
     var getGalleries:Function = function():Array
     {
        var result:Array = [];
        for each (var gallery:Object in galleries)
        {
           if (gallery.yearId == this.id) result.push(gallery);
        }
        return result;
     }
     
     return {
        getYearByName : function(name:String):Object {
           for each (var year:Object in years)
           {
              if (year.name == name) return year;
           }
           return null;
        },
        getYearById : function(id:uint):Object {
           return years[id] || null;
        },
        getGalleriesByYearId : function(yearId:uint):Array {
           var result:Array = [];
           for each (var gallery:Object in galleries)
           {
              if (gallery.yearId == yearId) result.push(gallery);
           }
           return result;
        },
        addYear : function(year:Object):void {
           year.getGalleries = getGalleries;
           years[year.id] = year;
        },
        addGallery : function(gallery:Object):void {
           gallery.getImages = imagesByGallery;
           galleries[gallery.id] = gallery;
        },
        addImage : function(image:Object):void {
           images.push(image);
        }
     }
}

Das ist jetzt sehr viel Code und nicht für jedermann ist auch gleich ersichtbar, was es damit auf sich hat. Und vor allem, wie wendet man das jetzt an?
Hier eine Beispielimplementierung:
ActionScript:
1
2
3
4
5
6
7
8
9
var dataProvider:Object = parseXML(xml);
trace(dataProvider.getYearByName("2010").id);
trace(dataProvider.getGalleriesByYearId(2).length)
var galleries:Array = dataProvider.getYearById(1).getGalleries();
for each (var gallery:Object in galleries)
{
     trace(gallery.title);
     trace(gallery.getImages().length);
}

Hier sieht man aus meiner Sicht die Vorteile. Es existieren Methoden, bei denen man schon anhand des Names auf deren Funktion schliessen kann. Bei "getYearByName" oder auch "getGalleriesByYearId" muss man nicht lange nachdenken für was die gut sind. :)

Das ist nur ein kleiner Ausschnitt über die Möglichkeiten, sich eine nach aussen hin einfache Struktur zu erschaffen.

Normalerweise würde ich eher dazu raten, alles klassenbasiert umzusetzen (Stichwort OOP), aber ich glaube, das wäre jetzt hier ein Schritt zu viel.
Geändert von badskill am 13.01.11 um 00:00 Uhr
RustyCake#70
Benutzerbild von RustyCake
Beiträge: 1776
Wohnort: Laimbach 6 1/2
Registriert: Nov 2002

13.01.2011, 00:40

Yupp, das sieht gut aus, muss ich mir mal in ruhe anschauen ;-)
Bin gespannt was der Thread-Ersteller dazu sagt :-)

Aber meine Arrays waren von überall erreichbar :-(
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muss erst gehen lernen"
Geändert von RustyCake am 13.01.11 um 00:42 Uhr
Purgar#71
Benutzerbild von Purgar
Beiträge: 151
Registriert: May 2010

Themenautor/in

13.01.2011, 08:41

sorry rusty..ich hatte eigentlich auch vor das so zu machen, wie wir es von anfang an hier durchgekaut haben..ich ärger mich auch total darüber..
Purgar#72
Benutzerbild von Purgar
Beiträge: 151
Registriert: May 2010

Themenautor/in

13.01.2011, 11:12

also badskills , ich komme damit gerade nicht klar..
 wie lade ich denn die xml ? wo ist der loader? wie muss der aussehen?
Purgar#73
Benutzerbild von Purgar
Beiträge: 151
Registriert: May 2010

Themenautor/in

13.01.2011, 16:45

oh man, ich gebe mich geschlagen..:-(
badskill#74
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

13.01.2011, 19:15

Den Loader hast du doch bereits selber erstellt (LoadXML).
Alles, was du da brauchst, um ein lauffähiges Beispiel zu erstellen ist also folgendes:
ActionScript:
1
2
3
4
var dataProvider:Object;
function LoadXML(e:Event):void {
      dataProvider = parseXML(new XML(e.target.data));
}

Und schon hast du ein Objekt (dataProvider) der über die Funktionalitäten verfügt, die mein Beispielskript bietet.
Purgar#75
Benutzerbild von Purgar
Beiträge: 151
Registriert: May 2010

Themenautor/in

13.01.2011, 19:48

oh ok, danke..so hatte ich es versucht, aber es nicht hinbekommen..war aber auch völlig neben der spur..ich werd es nochmals probieren
RustyCake#76
Benutzerbild von RustyCake
Beiträge: 1776
Wohnort: Laimbach 6 1/2
Registriert: Nov 2002

14.01.2011, 02:33

@ Purgar
Sorry das ich bis jetzt noch nicht geantwortet habe, hatte ein wenig zu tun.
Ich überlege mir auch manchmal, im Nachhinein Geschichten, die ich besser vorher gewusst hätte,
deswegen war mein Vorwurf vielleicht ein wenig deplatziert ;-) Sorry for that.
Ich konnte badskill seine API noch nicht testen, macht aber einen aufgeräumten Eindruck :-)
Ich kam zwar immer, mit meiner Array-Version ganz gut zu recht, aber auch nur weil ich mir über XML keine großen Gedanken machen wollte, deswegen mach ich das seit Jahren schon so,
wie ich es Dir gezeigt habe.
Aber ich denke, nach ein wenig rumspielen mit badskill's API, werd ich in Zukunft evtl. anders verfahren,
je nach Projekt natürlich ;-)
Vielleicht kann ich Dir ja doch noch ein wenig weiter helfen :-)
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muss erst gehen lernen"

AntwortenRegistrieren Seite1 2 3 4 5 6 7  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Das Leben geht weiter [Flash CS5] 12.01.2021 - Indy_Crossover
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2022 Sebastian Wichmann - Flashhilfe.de