Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 25-06-2006, 21:11   #1 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
Unhappy xml jeweils nur ein best. child einlesen

Hi, ich hab eine xml Datenbank, folgender Art, von der ich JEWEILS nur die Childs "vorname" und "nachname" in Flash einlesen will. also .firstChild und ChildNode[1] aber das aus JEDEM Hauptknoten! Wenn das klappt werde ich noch mehr childnodes hinzufügen, deshalb ist es wichtig, dass flash selektiv nur die 2 ausliest.

PS: Die xml datei wird immer erweitert, also die Anzahl der Einträge ändert sich stetig.

PHP-Code:
<?xml version=1.0 encoding=utf-8 ?>
<personendaten>
  <vorname inhalt='Hans'>
  </vorname>
  <nachname inhalt='Meier'>
  </nachname>
  <![CDATA[as
  ]]>
</personendaten><?xml version=1.0 encoding=utf-8 ?>
<personendaten>
  <vorname inhalt='Peter'>
  </vorname>
  <nachname inhalt='Schmidt'>
  </nachname>
  <![CDATA[41
  ]]>
</personendaten><?xml version=1.0 encoding=utf-8 ?>
<personendaten>
  <vorname inhalt='Meister'>
  </vorname>
  <nachname inhalt='Eder'>
  </nachname>
  <![CDATA[3333
  ]]>
</personendaten>
Das zugehörige as schaut bis jetzt so aus:

PHP-Code:
   // neues XML-Objekt erzeugen
   
texte_xml = new XML();
   
// evtl. Leerzeichen ingnorieren
   
texte_xml.ignoreWhite true;
   
// Laden der XML_Datei
   
texte_xml.load("personendaten.xml");
   
texte_xml.onLoad = function(ok) {
      
// wenn Datei erfolgreich geladen wurde …
      
if (ok) {
         
// …wird im Textfeld "ausgabe_xml" die gesamte XML-Datei ausgegeben
         
_root.ausgabe_xml.text this;

         
// …wird im Textfeld "ausgabe_vorname" der Inhalt des Attributes "inhalt" im Knoten "vorname" ausgegeben
         
_root.ausgabe_vorname.text texte_xml.firstChild.firstChild.attributes.inhalt;
         
// …wird im Textfeld "ausgabe_nachname" der Inhalt des Attributes "inhalt" im Knoten "nachname" ausgegeben
         
_root.ausgabe_nachname.text texte_xml.firstChild.childNodes[1].attributes.inhalt;
         
// …wird im Textfeld "ausgabe_sonstiges" der Inhalt des CDATA-Objektes augelesen. Dieser Inhalt kann HTML-Formatiert werden
         
_root.ausgabe_sonstiges.text texte_xml.firstChild.childNodes[2];
        
        
// ... werden hier alle namen aufgelistet:
         
_root.ausgabe_all.text //?????????? Was soll hier rein ?????
         
         
delete texte_xml;
      }
   };
}; 
__________________
O Genie der Herr ehre dein Ego
Beezle-Bug ist offline   Mit Zitat antworten
Alt 25-06-2006, 22:39   #2 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
ich nähere mich mühsamst einer lösung, wär euch echt um schnelle hilfe dankbar!
Es sieht jetzt so aus:
PHP-Code:
            anzahl texte_xml.childNodes.length;
            for (
i=0i<=anzahli++) {
                
_root.ausgabe_all.text texte_xml.childNodes[i].childNodes[1].attributes.inhalt;
            } 
funktioniert aber nicht.

Nochmal zur Info: In dem Textfeld mit dem instance Namen ausgabe_all sollen untereinander ALLE Namen stehen.

99 Nachname99, Vorname99
...
3 Nachname3, Vorname 3
2 Nachname2, Vorname2
1 Nachname1, Vorname1
__________________
O Genie der Herr ehre dein Ego
Beezle-Bug ist offline   Mit Zitat antworten
Alt 26-06-2006, 01:12   #3 (permalink)
notzucht
 
Benutzerbild von shorty
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 2.939
Hi Beezle-Bug,

als aller erstes solltest du unbedingt lernen eine xml richtig zu formulieren! Das fängt bei dem fehlenden wurzelknoten an, zieht sich über sinnlose processing instructions hin, und endet beim öffnen/schließen vor tags! Also unbedingt ein blick in die tutorials/einsteiger sektion des im Flash mit XML und Webservice Bereich hinterlegten threads schauen !

Anbei deine lmx datei in eine wohlgeformte xml transformiert. Wenn das, was da im CDATA-Bereich später eine person(al)nummer werden soll, dann ab damit ins attribut.
HTML-Code:
<?xml version="1.0" encoding="utf-8" ?>
<datadase>
  <person id="0">
     <firstname>Peter</firstname>
     <surname>Pan</surname>
  </person>
   <person id="8">
     <firstname>Polly</firstname>
     <surname>Pocket</surname>
  </person>
  <person id="1">
     <firstname>Susi</firstname>
     <surname>Sonnenschein</surname>
  </person>
  <person id="5">
     <firstname>Peter</firstname>
     <surname>Lustig</surname>
     <show>Löwenzahn</show>
     <rating>5</rating>
  </person>
</datadase>
und das passende script zu auslesen ...
PHP-Code:
//_level0.createTextField ('ausgabe_all', 0, 10, 10, 150, 200);

var database = new XML ();
database.ignoreWhite true;
database.onLoad = function (success)
{
    if (
success)
    {
        var 
target this.firstChild.childNodes;
        for (var 
0target.lengthi++)
        {
            var 
id target[i].attributes.id;
            var 
firstname target[i].childNodes[0].firstChild.nodeValue;
            var 
surname target[i].childNodes[1].firstChild.nodeValue;
            var 
fullString 'id:' id ', ' surname ', ' firstname;
            
_root.ausgabe_all.text += fullString '\n';
            
trace (fullString);
        }
    }
};
database.load ('database.xml'); 
trace
Code:
id:0, Pan, Peter
id:8, Pocket, Polly
id:1, Sonnenschein, Susi
id:5, Lustig, Peter
lg,
shorty
__________________
.
Flex in a week | Viertel vor halb nach Vollmond | ^^°.°^^ | Waltz with Bashir
.

Geändert von shorty (26-06-2006 um 01:21 Uhr)
shorty ist offline   Mit Zitat antworten
Alt 26-06-2006, 10:41   #4 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
uff!
also die xml basics hab ich mir schon einigermaßen durchgelesen, allerdings nicht so wirklich verstanden.
Das gleiche gilt für dein php skript. Natürlich erst mal vielen Dank!
Da ich alles mühsam ausprobieren, speichern, hochladen, testen müsste und bis übermorgen immer noch zu keinem Ergebnis kommen würde, frag ich dich gleich nochmal:
Flash muss die Daten ja auslesen: Ich mach das mal mit

this.onEnterFrame = lesen();

Alternativ könnt ich auch nen button einfügen

this.btn_lesen.onPress=lesen() ;

Problem 1: Auch ohne onEnterFrame wird die Funktion ausgeführt, bevor man überhaupt den Button gedrückt hat. Komkische Sache, aber nicht soo störend.

Mein AS schaut jetzt folgendermaßen aus und läuft ganz gut:

PHP-Code:
lesen = function () {
    
trace("lesen");
    
ausgabe_liste "";
    
// neues XML-Objekt erzeugen
    
texte_xml = new XML();
    
// evtl. Leerzeichen ingnorieren
    
texte_xml.ignoreWhite true;
    
// Laden der XML_Datei
    
texte_xml.load(pfadname+seitenname);
    
texte_xml.onLoad = function(ok) {
        
// wenn Datei erfolgreich geladen wurde …
        
if (ok) {
            
// …wird im Textfeld "ausgabe_vorname" der Inhalt des Attributes "inhalt" im Knoten "vorname" ausgegeben
            
_root.ausgabe_vorname.text texte_xml.firstChild.firstChild.attributes.inhalt;
            
// …wird im Textfeld "ausgabe_nachname" der Inhalt des Attributes "inhalt" im Knoten "nachname" ausgegeben
            
_root.ausgabe_nachname.text texte_xml.firstChild.childNodes[1].attributes.inhalt;
            
// …wird im Textfeld "ausgabe_sonstiges" der Inhalt des CDATA-Objektes augelesen. Dieser Inhalt kann HTML-Formatiert werden
            
_root.ausgabe_sonstiges.text texte_xml.firstChild.childNodes[2];


            
// ... werden hier alle namen aufgelistet:
            
var anzahl texte_xml.childNodes.length;
            for (var 
i=0i<=anzahli++) {
                var 
id anzahl-i;
                var 
firstname texte_xml.childNodes[i].childNodes[0].attributes.inhalt;
                var 
surname texte_xml.childNodes[i].childNodes[1].attributes.inhalt;
                var 
fullString id+': '+surname+', '+firstname;
                
_root.ausgabe_liste += fullString+'\n'//(war früher ausgabe_all)
                
trace(fullString);
                
delete _parent.onEnterFrame;
            }
            
delete texte_xml;/*

            faktor = 3;
            balken._height = anzahl*faktor;
            anzeige_anzahl._y = balken._y-balken._height-20;
            anzeige_anzahl._x = balken._x;
            anzeige_10._x = anzeige_25._x=anzeige_50._x=anzeige_100._x=balken._x-20;
            anzeige_10._y = balken._y-10*faktor;
            anzeige_25._y = balken._y-25*faktor;
            anzeige_50._y = balken._y-50*faktor;
            anzeige_100._y = balken._y-100*faktor;*/
        
}
    };
};

//Die Funktion soll beim ersten Starten aufgerufen werden und sobald man den button drückt
_root.onEnterFrame _root.btn_lesen.onRelease=lesen(); 
Das funktioniert soweit ganz gut, allerdings wird die xml oft nicht geladen. bzw ich muss 5 mal refreshen bevor ich die neuen daten aufgelistet kriege.

Ich denke das liegt am browser, der nicht sofort merkt, dass die xml datei verändert wurde. Denkt ihr, dass könnte man ändern, wenn man das skript über php ausführt? Damit kenn ich mich allerdings gar nicht aus :-(
Letztendlich wird die funktion ja so ähnlich auch im php aussehen müssen, nur wie man dann die Daten wieder richtig an Flash übermittelt und Flash überhaupt erst sagt, dass es das php ausführen soll - keine Ahnung!
__________________
O Genie der Herr ehre dein Ego
Beezle-Bug ist offline   Mit Zitat antworten
Alt 26-06-2006, 10:45   #5 (permalink)
notzucht
 
Benutzerbild von shorty
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 2.939
Dito, liegt am browser cache. Klemm einfach an folgende zeile
PHP-Code:
texte_xml.load(pfadname+seitenname); 
einen timestamp o.ä. dran, dann wird sie immer frisch geladen

PHP-Code:

texte_xml
.load(pfadname seitenname '?' random (201177) ); 
lg,
shorty

{btw} das ist kein php, sonder Action-Script!
__________________
.
Flex in a week | Viertel vor halb nach Vollmond | ^^°.°^^ | Waltz with Bashir
.

Geändert von shorty (26-06-2006 um 10:46 Uhr)
shorty ist offline   Mit Zitat antworten
Alt 26-06-2006, 10:46   #6 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
Arrow

hier ist der link zum veranschaulichen:
http://schoerner.sc.ohost.de/birdshot/helpme.html
__________________
O Genie der Herr ehre dein Ego
Beezle-Bug ist offline   Mit Zitat antworten
Alt 26-06-2006, 10:49   #7 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
wow, der hase ist schneller wie der blitz!
ja danke, jetzt läuft die sache rund :-))
__________________
O Genie der Herr ehre dein Ego
Beezle-Bug ist offline   Mit Zitat antworten
Alt 26-06-2006, 10:50   #8 (permalink)
notzucht
 
Benutzerbild von shorty
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 2.939
welche flash version benutzt du - 8, 7, 6? In welche version soll exportiert werden?
__________________
.
Flex in a week | Viertel vor halb nach Vollmond | ^^°.°^^ | Waltz with Bashir
.
shorty ist offline   Mit Zitat antworten
Alt 26-06-2006, 10:53   #9 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
ich exportiere in flash6, benutze flashMX (also 7?)

weißt du woran es liegen könnte, dass die funktion automatisch ausgeführt wird, auch wenn ich das onEnterFrame weglasse?
__________________
O Genie der Herr ehre dein Ego
Beezle-Bug ist offline   Mit Zitat antworten
Alt 26-06-2006, 10:56   #10 (permalink)
notzucht
 
Benutzerbild von shorty
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 2.939
jup, weil du für ein onRelease nicht
PHP-Code:
buttonInstance.onRelease lesen(); 
sondern
PHP-Code:
btn_lesen.onRelease = function ()
{
   
_root.lesen();

schreiben müstest.

{edit} hups, kleiner fehler drin gewesen, habs berichtigt
__________________
.
Flex in a week | Viertel vor halb nach Vollmond | ^^°.°^^ | Waltz with Bashir
.

Geändert von shorty (26-06-2006 um 11:04 Uhr)
shorty ist offline   Mit Zitat antworten
Alt 26-06-2006, 11:33   #11 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
eine Frage hab ich noch. Hat zwar nichts mit Funktionalität zu tun, wär aber schöner wenn auch mein code gut aussieht ;-)

Meine parse.php, die die Daten in das XML-File schreibt, schaut im Moment immer noch so aus:

PHP-Code:
<?php

if ($uebergabe){
        
$uebergabe=stripslashes($uebergabe);
        
        
    
$fpa         fopen($pfadname $seitenname"r"); 
    
$OldOrder     fread($fpa80000); 
    
fclose$fpa ); 
        
      
     
     
$NewOrder "$uebergabe$OldOrder";
     
         
$fpa fopen($pfadname $seitenname,"w"); 
//    if(!$fp) die("&GuestBook=cannot write $bestellliste ......&");
    
fwrite($fpa$NewOrder800000); 
    
fclose$fpa ); 
     
?>
Und was hier als $uebergabe bezeichnet wird, ist ein von Flash erstellter String, nachdem der submit button gedrückt wurde. Dass das nicht schön gemacht ist, fällt sogar mir auf, aber es funktioniert soweit und das ist mir im mom wichtiger

PHP-Code:
        //Formatierung der XML-Datei
        xml_formatierung = "<?xml version=1.0 encoding=utf-8 ?>";
        xml_formatierung += "\n";
        xml_formatierung += "<personendaten>";
        xml_formatierung += "\n";
        xml_formatierung += "  <vorname inhalt='"+vorname+"'>";
        xml_formatierung += "\n";
        xml_formatierung += "  </vorname>";
        xml_formatierung += "\n";
        xml_formatierung += "  <nachname inhalt='"+nachname+"'>";
        xml_formatierung += "\n";
        xml_formatierung += "  </nachname>";
        xml_formatierung += "\n";
        xml_formatierung += "  <![CDATA["+sonstiges;
        xml_formatierung += "\n";
        xml_formatierung += "  ]]>";
        xml_formatierung += "\n";
        xml_formatierung += "</personendaten>";
        // Ende der XML-Formatierung
        // neues LoadVars-Objekt zum Übertragen der Daten an die PHP-Datei "parse.php"
        php_parse = new LoadVars();
        // Die Formatierungsvariable wird dem LoadVars-Objekt übertragen
        php_parse.uebergabe = xml_formatierung;
        // diese Variable bezeichnet den relativen Pfad zum Ordner, in dem die XML geladen wird. Wird sie wie jetzt leer gelassen, wird die XML im selben Verzeichnis wie die PHP-Datei erzeugt.
        php_parse.pfadname = pfadname;
        // Hier wird nur der Name der zu generierenden XML-Datei übermittelt.
        php_parse.seitenname = seitenname;
        // zu guter Letzt werden die Daten an die PHP_Datei gesendet
        php_parse.onLoad = geladen;
        php_parse.sendAndLoad("parse.php", php_parse, "POST");
Unabhängig davon, dass der Baum nicht von einer <database></database> eingeschlossen wird, wird auch die zeile

<?xml version=1.0 encoding=utf-8 ?>

vor jeden eintrag gepostet. Das schaut nicht gut aus!


--> Was ich brauche ist die erstellung von <?xml version=1.0 encoding=utf-8 ?> am Anfang der Datei, dann das öffnen des <database> und da drinne sollen dann alle knoten stehen. am Schluss EIN </database> und fertig.

Könnte gehen, wenn mein php nicht die gesamte xml einliest, als $oldOrder speichert und unten wieder dranhängt. Denn genau dadurch verfielfältigen sich ja die Einträge....

PS: so schaut die xml aus :-(
PHP-Code:
<?xml version=1.0 encoding=utf-8 ?>
<personendaten>
  <vorname inhalt='jaaaa'>
  </vorname>
  <nachname inhalt='so so ;-)'>
  </nachname>
  <![CDATA[lach
  ]]>
</personendaten><?xml version=1.0 encoding=utf-8 ?>
<personendaten>
  <vorname inhalt='soso'>
  </vorname>
  <nachname inhalt='aha'>
  </nachname>
  <![CDATA[danke
  ]]>
</personendaten><?xml version=1.0 encoding=utf-8 ?>
<personendaten>
  <vorname inhalt='vorname'>
  </vorname>
  <nachname inhalt='nachname'>
  </nachname>
  <![CDATA[
  ]]>
</personendaten>
__________________
O Genie der Herr ehre dein Ego
Beezle-Bug ist offline   Mit Zitat antworten
Alt 28-06-2006, 09:41   #12 (permalink)
Z-Fighter
 
Benutzerbild von Amargosa
 
Registriert seit: Jun 2006
Ort: Offenbach
Beiträge: 141
Lightbulb Cool

Zitat:
Zitat von shorty
und das passende script zu auslesen ...
Ah mann.... Du hast ja keine Ahnung wie sehr mir das geholfen hat. Danke!
__________________
Ben the Amargosa Sun
(\__/)
(O.o )
(> < )
This is Bunny. Copy Bunny into your signature to help him on his way to world domination.
Amargosa ist offline   Mit Zitat antworten
Alt 02-07-2006, 20:56   #13 (permalink)
notzucht
 
Benutzerbild von shorty
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 2.939
na dann is ja alles schick
__________________
.
Flex in a week | Viertel vor halb nach Vollmond | ^^°.°^^ | Waltz with Bashir
.
shorty 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 13:56 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele