Zurück   Flashforum > Flash und Server > Flash mit XML und Webservices

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 27-08-2008, 18:49   #1 (permalink)
Flash-Einsteiger
 
Benutzerbild von Meder
 
Registriert seit: Jun 2008
Ort: Nähe Frankfurt/M
Beiträge: 127
Mein Start ins XML-Projekt

Dank agedoubleju versuche ich jetzt, mein Projekt auf einer xml aufzubauen. Als Neueisteiger ist das für mich n ganz schön großer Brocken, aber ich erhoffe mir davon, dass sich dann meine Flash-Site wesentlich einfacher Pflegen lässt.

Ich habe mir hier schon das Tutorial eingelesen und (so hoffe ich) verstanden. Bevor ich jetzt weiter mache - und mich ggf. in einer Sackgasse verirre frage ich lieber, welchen Weg ich am besten einschlage.

Der XML Aufbau - lieber so:

PHP-Code:
<?xml version="1.0" encoding="utf-8"?>
<referenzen>
    <referenz 
        name="Text"
        kategorie="Text"
        status="Text"
        url="http://www.abc.de"
        beschreibung="Text"
        bild="Bild1.jpg,Bild2.jpg,Bild3.jpg" />
</referenzen>
oder so:

PHP-Code:
<?xml version="1.0" encoding="utf-8"?>
<referenzen>
    <referenz name="Name1">
        <kategorie>Text</kategorie>
        <datum>Text</datum>
        <status>Text</status>
        <url>http://wwwabc.de</url>
        <beschreibung>Text</beschreibung>
        <bild>Bild1.jpg,Bild2.jpg,Bild3.jpg</bild>
    </referenz>
</referenzen>
Gibt es da Vor/Nachteile?

Weiterhin wurde erwähnt, dass Umlaute in der XML problematisch wären. Gilt das nur für die Namen, oder auch für die Strings? Weil in "beschreibung" werden sicher Umlaute vorkommen. Dafür brauche ich auf jeden Fall eine Lösung.


Nachtrag:

So lese ich momentan die zweite XML version aus:

PHP-Code:
var XMLdaten = new XML();
XMLdaten.ignoreWhite=true
XMLdaten.load("referenzen2.xml");

XMLdaten.onLoad = function(success) {//wenn die Datei geladen wird
    
XMLdaten_name = [];
    
XMLdaten_kategorie = [];
    
XMLdaten_datum = [];
    
XMLdaten_status = [];
    
XMLdaten_url = [];
    
XMLdaten_beschreibung = [];
    
XMLdatem_bilder = [];
    if (
success) { //wenn das laden der File erfolgreich war
        
for (var i=0i<XMLdaten.firstChild.childNodes.lengthi++) {//for schleife-> für
                                          //alle elemente die firstChild (childNode[0]) besitzt...
            
XMLdaten_name[i] = XMLdaten.firstChild.childNodes[i].attributes.name
            
trace(XMLdaten_name[i]);
            for (var 
j=0j<XMLdaten.firstChild.childNodes[i].childNodes.lengthj++) {
                switch(
XMLdaten.firstChild.childNodes[i].childNodes[j].nodeName) {
                    case 
"kategorie":
                        
XMLdaten_kategorie[i] = XMLdaten.firstChild.childNodes[i].childNodes[j].childNodes;
                        break;
                    case 
"datum":
                        
XMLdaten_datum[i] = XMLdaten.firstChild.childNodes[i].childNodes[j].childNodes;
                        break;
                    case 
"status":
                        
XMLdaten_status[i] = XMLdaten.firstChild.childNodes[i].childNodes[j].childNodes;
                        break;
                    case 
"url":
                        
XMLdaten_url[i] = XMLdaten.firstChild.childNodes[i].childNodes[j].childNodes;
                        break;
                    case 
"beschreibung":
                        
XMLdaten_beschreibung[i] = XMLdaten.firstChild.childNodes[i].childNodes[j].childNodes;
                        break;
                }
            }
        }
    
gotoAndStop(2);
    }

Also so weit ist es schonmal recht schmerzlos. Es funktioniert, aber ich denke es ist noch nicht optimal, so ein langes Prozedere mit dem switch case. Aber ich wollte sicher gehen, dass die Reiehnfolge egal ist. Falls noch jemand nen schöneren Vorschlag hat, das gezielter anzugehen...

Am liebsten würde ich ja direkt über den node Name da ran kommen.

Ansosnten bleibt mir nur darauf zu vertrauen, dass die Elemente immer in der selben Reihenfolge kommen.

Also, macht es einen Unterschied, welchen Weg ich gehe?

Geändert von Meder (27-08-2008 um 21:20 Uhr)
Meder ist offline   Mit Zitat antworten
Alt 27-08-2008, 23:40   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
Gibt es da Vor/Nachteile?
Allgemein sollen Attribute schneller geladen und geparst werden können, als Knoten. Wenn du Sonderzeichen nutzen willst (bspw. für Tags o.ä.), funzt das mit Attributen nicht. Da solltest du dann besser auf Knoten ausweichen und diese mit CDATA-Sequenzen vor dem vorzeitigen Formatieren schützen. Leider funzen CDATA-Sequenzen nicht in Attributen...

Zitat:
Weiterhin wurde erwähnt, dass Umlaute in der XML problematisch wären.
Nicht, wenn du deine XML-Files als Unicode UTF-8 abspeicherst. XML-Editoren, aber auch unter Windows das Notepad, haben dafür eigene Speichereinstellungen.

Zitat:
Falls noch jemand nen schöneren Vorschlag hat, das gezielter anzugehen...
Schau dir mal XPath an...
  Mit Zitat antworten
Alt 27-08-2008, 23:59   #3 (permalink)
Achim Math.PI
 
Benutzerbild von bloba
 
Registriert seit: Jul 2001
Ort: cool Colonia
Beiträge: 11.642
schau dir die klasse mal an

die steckt xpath auf grund der guten bedienbarkeit und perf. locker in die tasche, finde ich
__________________
gruß bloba

2 x onkel² b_d
bloba ist offline   Mit Zitat antworten
Alt 28-08-2008, 06:12   #4 (permalink)
Flash-Einsteiger
 
Benutzerbild von Meder
 
Registriert seit: Jun 2008
Ort: Nähe Frankfurt/M
Beiträge: 127
Also dann am besten eine Mischung meinen obigen Beispielen? Sollte ich außer der Beschreibung, die Umlaute enthalten kann noch etwas in nen eigene Node packen, oder ist der Rest unproblematisch? (z. B. die URL)


bloba, meintest Du diese klasse?
PHP-Code:
      import gs.dataTransfer.XMLParser;
      
XMLParser.load("myDocument.xml"onFinish);
      function 
onFinish($success:Boolean$results:Object$xml:XML):Void //This function gets called when the XML gets parsed.
          
if ($success) {
              
trace("The first book is: "+$results.Book[0].name);
          }
      } 
Bekommt er damit wirklich nur die Nodes "Book" raus und ignoriert die mit einem andern Namen wie <Novel> usw.? Damit ließe sich dann ja schon sehr gut arbeiten. Und der Code sieht so schön schlank aus... ;-)
Meder ist offline   Mit Zitat antworten
Alt 28-08-2008, 19:32   #5 (permalink)
Flash-Einsteiger
 
Benutzerbild von Meder
 
Registriert seit: Jun 2008
Ort: Nähe Frankfurt/M
Beiträge: 127
Also ich glaube, ich konnte damit schon mal einen ganz guten Grundstein legen. Danke für den Tipp mit dem XMLparser!

Zu meinem Projekt - ich möchte folgende Struktur abbilden:
  • Kategorien
    • Referenzen mit
      • Name
      • Beschreibung
      • Datum der Veröffentlichung
      • Status
      • URL
      • ein oder mehrere Bilder

ich habe dafür momentan folgende Abbildungsweise in der XML gewählt.

PHP-Code:
<?xml version="1.0" encoding="utf-8"?>
<Referenzen>
    <Kategorie name="Kategorie1">
        <Referenz name="Name1" datum="2008" status="online">
            <Url>http://wwwabc.de</Url>
            <Beschreibung><![CDATA[Text mit Umlauten.]]></Beschreibung>
            <Bild>bild1.jpg</Bild>
        </Referenz>
        <Referenz name="Name2" datum="2008" status="online" >
            <Url>http://wwwabc.de</Url>
            <Beschreibung><![CDATA[Text mit Umlauten.]]></Beschreibung>
            <Bild>bild1.jpg</Bild>
        </Referenz>
        <Referenz name="Name3" datum="2008" status="online">
            <Url>http://wwwabc.de</Url>
            <Beschreibung><![CDATA[Text mit Umlauten.]]></Beschreibung>
            <Bild>bild1.jpg</Bild>
            <Bild>bild2.jpg</Bild>
            <Bild>bild3.jpg</Bild>
        </Referenz>
    <Kategorie>
</Referenzen>
und mit dem Script lässt sich das prima auslesen und in ein Array packen:

PHP-Code:
import gs.dataTransfer.XMLParser;
XMLParser.load("referenzen3.xml"onFinishnullfalsetrue);
function 
onFinish($success:Boolean$parsedObject:Object$xml:XML):Void //This function gets called when the XML gets parsed.
    
if ($success) {
        var 
referenzen:Array = $parsedObject.Kategorie;
        
trace("Anzahl der Kategorien: "+referenzen.length);
        
trace("Name der Referenz "+referenzen[0].Referenz[2].name);
        
trace("Status: "+referenzen[0].Referenz[2].status);
        
trace("Datum: "+referenzen[0].Referenz[2].datum);
        
trace("URL: "+referenzen[0].Referenz[2].Url[0].value);
        
trace("Anzahl der Bilder: "+referenzen[0].Referenz[2].Bild.length);
    }


Durch die traces wird hier nur beispielhaft der Inhalt einer Referenz ausgespuckt.

Ich bräuchte eben eure Bewertung dazu.
  1. Ist die Struktur der XML ok? Ich habe jetzt ja primär Knoten genutzt, damit ich z. B. mehrere Bilder gleich in ein Array bekomme und nicht erst einen String splitten muss. Evtl. könnte noch die Url als Attribut durchgehen.
  2. Welche Daten muss/sollte ich als CDATA einbinden?
  3. Ist es ok, wirklich alles in ein Array zu packen? In meinem ersten Ansatz habe ich das auf ein Array pro Kategorie aufgeteilt. Ich habe es zwar momentan nicht unbedingt vor, auch die Kategorien dynamisch erstellen zu lassen - denkbar ist es aber auf jeden Fall - und dafür stelle ich mir ein großes Array praktischer vor.


edit: habe mal CDATA für die Beschreibung eingebaut. Ok so?
edit²: ich renne gerade in das nächste Problem. Hier gibt es verschiedene Hinweise, wie man ne dynamische Navigation erstellt. Funktionsweise super. Aussehen - naja. Ich hab bei mir nur Text Links mir ner einfachen Farbveränderung bei rollover - der Text ist dabei in nem Font der eigentlich eingebunden werden muss und ich möchte da Antialiasing drauf. Ist das machbar?

Geändert von Meder (28-08-2008 um 20:24 Uhr)
Meder ist offline   Mit Zitat antworten
Alt 28-08-2008, 21:07   #6 (permalink)
Flash-Einsteiger
 
Benutzerbild von Meder
 
Registriert seit: Jun 2008
Ort: Nähe Frankfurt/M
Beiträge: 127
Mein Aktueller Ansatz für die Navigation:
MC mit dyn. Textfeld erstellen und als Symbol exportieren,
den MC dann für jeden Menüpunkt auf die Bühne laden, den Text darin anpassen, bei Mousover einfach die Farbe des MCs ändern. Kann man ja über Farbe > Farbton machen.

Ist die Idee gut? Danach kommt die Frage, wie ich den Farbton ansteuere. Hab bisher nur mit _alpha was gemacht...
Meder ist offline   Mit Zitat antworten
Alt 28-08-2008, 21:12   #7 (permalink)
Achim Math.PI
 
Benutzerbild von bloba
 
Registriert seit: Jul 2001
Ort: cool Colonia
Beiträge: 11.642
wenn klappt is doch erstmal knorke
sieht doch ganz locker aus.

um was einzufärben kannst dir von der selben seite mal die TweenMax klasse mal anschauen damit kannst du deine clips einfärben wie du lustig bist
__________________
gruß bloba

2 x onkel² b_d
bloba ist offline   Mit Zitat antworten
Alt 29-08-2008, 06:07   #8 (permalink)
Flash-Einsteiger
 
Benutzerbild von Meder
 
Registriert seit: Jun 2008
Ort: Nähe Frankfurt/M
Beiträge: 127
Naja, momentan habe ich einfach nur zwei Farben, zwischen denen ich switche.
Auf die TweenMax Klasse bin ich auch bei meiner Suche gestoßen. Dachte das wäre n bischen viel Code, nur um die Textfarbe zu ändern - dachte das würde auch mit colorTransform gut gehen. Ist ja kein Farbübergang, den ich brauche.

Andererseits würde n Farbtween natürlich auch schön soft aussehen, falls es überhaupt jemand bemerkt.

Ich hab nochmal über die Seite geschaut und da gibts ja auch den ColorTransformProxy. Der würde ja auch schon reichen.

Auf GreenSock gibts doch diesen Tweenig vergleich. Soll das wirklich heißen, dass es besser ist über dieses MaxTween ein Objekt zu bewegen als über einen MotionTween den ich per hand im SWF gebaut habe?

Dann muss ich jetzt nur noch die ganzen Beiträge hier zu der dynamschen Navigation verstehen. Im Moment hab ich da schwer dran zu knabbern.

Geändert von Meder (29-08-2008 um 06:21 Uhr)
Meder ist offline   Mit Zitat antworten
Alt 06-09-2008, 21:41   #9 (permalink)
Flash-Einsteiger
 
Benutzerbild von Meder
 
Registriert seit: Jun 2008
Ort: Nähe Frankfurt/M
Beiträge: 127
Sollte ich die URL auch als CDATA übertragen, oder kann ich die auch ohne Bedenken als Attribut nehmen?
Meder 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 04:06 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele