Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 02-01-2005, 16:47   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 51
Question Problem mit Array erstellen, weiß leider nicht weiter

Hi Leute,

ich möchte ein kleines Flash basteln was anhand einer XML-Datei nachschaut welche Handys für gewisse Funktionen (SMS, MMS) in Frage kommt.

Die XML-Datei:

PHP-Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE geraete [
<!ELEMENT geraete (artikel+)>
<!ELEMENT artikel (nr,name,sms,mms)>
<!ELEMENT nr (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT sms (#PCDATA)>
<!ELEMENT mms (#PCDATA)>
]>
<geraete>
<artikel>
    <nr>347637</nr>
    <name>Siemens MC 60</name>
    <sms>true</sms>
    <mms>false</mms>
</artikel>
<artikel>
    <nr>276379</nr>
    <name>Siemens X1</name>
    <sms>true</sms>
    <mms>true</mms>
</artikel>
</geraete>
Wobei ich eine .fla habe die diese Daten in Arrays läd.

PHP-Code:
geraeteXML = new XML();
geraeteXML.onLoad transXML;
display "XML wird geladen";
geraeteXML.load("geraete.xml");

function 
transXML() {
    if (
this.loaded) {
        
display "XML-Daten sind da";
    }
    
keyTag = new XML();
    
nodeID = new XML();
    
nameList = new Array();
    
geraeteList = new Array();
    
artikel = new Array();
    
artikelnr = new Array();
    
keyTag this.lastChild;
    
geraeteList keyTag.childNodes;    
    
display "";
    for (
kid=0kid<=geraeteList.lengthkid++) {
        if (
geraeteList[kid].nodeName.toLowerCase() == "artikel") {
            
nameList geraeteList[kid].childNodes;
            for (
nl=0nl<=nameList.lengthnl++) {
                
nodeID nameList[nl];
                
elementID nodeID.nodeName.toLowerCase();
                if (
elementID == "nr") {
                    
nr nodeID.firstChild.nodeValue;                    
                }
                if (
elementID == "name") {
                    
name nodeID.firstChild.nodeValue;                    
                }
                if (
elementID == "sms") {
                    
sms nodeID.firstChild.nodeValue;                    
                }                
                if (
elementID == "mms") {
                    
mms nodeID.firstChild.nodeValue;                    
                }
            }
            
display += nr+" | "+name+" | "+sms+" | "+mms+newline;
            
//trace(artikelnummer);            
        
}
    }

Ich möchte auf die einzelnen Werte von SMS oder MMS zugreifen, wie kann ich diese in einen weiteren Array speichern, damit ich später bei Angabe einer bestimmten Funktion (per Checkbox) ich dann nur die Geräte anzeigen kann welche auch in der jeweiligen Funktion "true" haben ;o)

Danke für eure Hilfe
Angehängte Dateien
Dateityp: zip geraete.zip (5,3 KB, 1x aufgerufen)

Geändert von macom500 (02-01-2005 um 16:54 Uhr)
macom500 ist offline   Mit Zitat antworten
Alt 02-01-2005, 17:01   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Was hast du denn jetzt in nr, name, sms etc gespeichert, bzw. was gibt ein trace an der entsprechenden Stelle aus?
  Mit Zitat antworten
Alt 02-01-2005, 17:11   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 51
die jeweiligen Inhalte für nr zb.: die Artikelnr (beide, wenn ich trace nach nr = nodeID.firstChild.nodeValue aber die muss ich ja irgendwie trennen wenn ich für die unterschiedlichen Artikel etwas filtern möchte.
macom500 ist offline   Mit Zitat antworten
Alt 02-01-2005, 17:15   #4 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Dann setz doch statt der Variablen weitere Arrays ein, z.B. nr[nl]=...
  Mit Zitat antworten
Alt 02-01-2005, 17:26   #5 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 51
aber wie kann ich dann auf die einzelnen zugreifen, bin ziemlich neu in den dingen
macom500 ist offline   Mit Zitat antworten
Alt 02-01-2005, 18:07   #6 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 51
hab jetzt
PHP-Code:
nr[nl] = nodeID.firstChild.nodeValue
gesetzt
kann auch auf die xml daten zugreifen:
PHP-Code:
display += nr[1] + name[3] + sms[5] + mms[7]; 
jedoch immer nur auf die letzten des xml dokuments, wie kann ich eventuell alle in das array reinlegen und auslesen?
macom500 ist offline   Mit Zitat antworten
Alt 02-01-2005, 18:30   #7 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
dazu mußt du deinen xml in einem array abbilden, um später damit weiter zu arbeiten.
oder aber du lädst die xml erneut, um durch das doc zu rennen und nach vorkommen sms==true zu suchen.

ich hätte die hirachie hierbei eh anders gelöst.
das anlegen einzelener arrays, wie artikel, name etc. macht da eher weniger sinn.
hier böte sich an entweder mehrdimensionale arrays anzulegen, evtl. assoziative arrays, oder objekte( die im endeffekt dann wie ein assioziatives array arbeiten und angesprochen werden).


also für jedes vorkommen von artikel ein obejkt angelegt, dass folgende eigenschaften besitzt:
art-nr, name, sms, mms.
dieses obejkt dann in dein array 'artikel' reingepusht.

ein objekt legt man so an:

ActionScript:
  1. var artikelArray =[];
  2. for(var i=0 ; i<wasweißich; i++){
  3.      var _num_ = pfad zur artikelnummer in der xml;
  4.      var _name_ = pfad zum artikelnamen  in der xml;
  5.      var _sms_ = pfad zum boolean...;
  6.      var _mms_ = pfad zum boolean...;
  7.      artikelArray.push({artikelNummer: _num_, artikelName: _name_, sms: _sms_, mms: _mms_});
  8. }

und schon kannst du durch dein array rennen mit:

ActionScript:
  1. function searchValue (arg, val){
  2.            var tmpSearchArray =[];
  3.            for(var j=0; j<= artikelArray.length; j++){
  4.                 if( artikelArray[j][arg] == true) { tmpSearchArray.push(artikelArray[j][val]);
  5.            }
  6.            return tmpSearchArray;
  7. }

und jetzt suchst du z.bsp. nach allen sms-fähigen handys und willst die artikelnummer haben, dann:

ActionScript:
  1. var ergebnis = searchValue ('sms', 'artikelnummer');
  2. trace( ergebnis);

1.parameter der funktion wäre hier die eigenschaft, die du suchst
2. parameter wäre hier die eigenschaft, die du haben möchtest ( also name oder artikelnummer, etc...)

verstanden?

einfach mal testen


greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 02-01-2005, 20:48   #8 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Hier würde sich auch die XPATH-API anbieten, mit der man die XML-Files "einfacher" auswerten kann, als mit der herkömmlichen Methode. Schau mal nach geeigneten Beispielen unter "Suchen".
  Mit Zitat antworten
Alt 09-01-2005, 11:27   #9 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 51
Wink

Danke euch für die schnellen Antworten, haben mir wirklich geholfen.
macom500 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:31 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele