Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    Strutture dati in Flash MX

    Ciao,

    volevo sapere come si gestiscono gli array associativi in Flash MX. Mi spiego. Io vorrei caricare tutti i dati che mi servono da un file XML all'inizio dell'applicazione. La struttura del file XML è del seguente tipo:

    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <newspaper titolo="" data="">  
      	
    	<sezione nome="vacanze">
    	  <articolo numero="1">
    		  <titolo>			
    			</titolo>
    			<sottotitolo>			
    			</sottotitolo>
    			<corpus>			
    			</corpus>
    			<autore>		
    			</autore>
    			<mp3>			
    			</mp3>
    		</articolo>		
    	
    	  <articolo numero="2">
    		  <titolo>			
    			</titolo>
    			<sottotitolo>			
    			</sottotitolo>
    			<corpus>			
    			</corpus>
    			<autore>		
    			</autore>
    			<mp3>			
    			</mp3>
    		</articolo>		
    	</sezione>
    	
    </newspaper>
    Avrei bisogno di una struttura dati che mi permetta di accedere ai vari valori in modo semplice.

    Come posso creare una buona struttura dati tale che contenga tutti i dati del file XML in questione? come posso gestire il caricamento e la lettura di questi dati?

  2. #2

  3. #3
    So come caricare i dati in XML, ad esempio per il file XML che ho definito ho risolto in questo modo:

    codice:
    // Caricamento Titolo--Data dei quotidiani.
    mio_xml = new XML();
    mio_xml.path = this;
    mio_xml.ignoreWhite = true;
    mio_xml.onLoad = function(success)
    {
      if(success){
        //trace("caricamento riuscito!");
    	
    	//Caricamento titolo quotidiano
    	var titolo_quotidiano = this.firstChild.attributes.titolo;
    	
    	//Caricamento data quotidiano
    	var data_quotidiano = this.firstChild.attributes.data;
    	
    	//Visualizzazione info quotidiano
    	_root.sezioni_mc.info_newspaper.text = titolo_quotidiano + " - " + data_quotidiano;
    	
    	
    	
    	// nome sezione quotidiano
    	//var sezione = this.firstChild.childNodes[0].firstChild.childNodes[0].firstChild.nodeValue;
    	//trace(sezione);
    	
    	// Elenco Record SEZIONE
    	var nodes = this.firstChild.childNodes;
    	//trace(nodes);
    	
    	//	
        for(var i=0; i<nodes.length; i++){
    	  
    	  var nome_sezione = nodes[i].attributes.nome;
    	  //trace(nome_sezione);	  
    	  
    	  var nodes1 = nodes[i].childNodes;
    	  //trace(nodes1.length);
    	  
    	  for(var j=0; j<nodes1.length; j++){
    	  
    	  	var nodes2 = nodes1[j].childNodes;
    	  	//trace(nodes2);  	
    	  		  
    	    //Dati relativi ad un articolo di un data sezione	    
    		//trace("nome sezione: " + nome_sezione);
    		
    		var numero_articolo = nodes1[j].attributes.numero;
    	    //trace("numero articolo: " + numero_articolo);
    	    articoli.push(numero_articolo);	  
    	  
    	    var titolo = nodes2[0].firstchild.nodeValue;
    	    //trace("titolo: " + titolo);
    		articoli.push(titolo);
    	  
    	    var sottotitolo = nodes2[1].firstchild.nodeValue;
    	    //trace("sottotitolo: " + sottotitolo);
    		articoli.push(sottotitolo);
    	  
    	    var corpus = nodes2[2].firstchild.nodeValue;
    	    //trace("corpus: " + corpus);
    		articoli.push(corpus);
    	  
    	    var autore = nodes2[3].firstchild.nodeValue;
    	    //trace("autore: " + autore);
    		articoli.push(autore);
    	  
    	    var mp3 = nodes2[4].firstchild.nodeValue;
    	    //trace("mp3: " + mp3);
    		articoli.push(mp3);		
    	  }	 
    	  
    	  sezioni[nome_sezione] = articoli;
    	  	  
    	}
      } else {
    	// messaggio di errore per l'utente  
        trace("Caricamento Errato!");
      }
    };
    mio_xml.load("./eNewspaper.xml");

    Il mio problema è che vorrei organizzare tutti i dati caricati in una struttura dati semplice tipo un array associativo, ma non so come gestire il tutto in modo semplice. Pensavo ad un array associativo di questo tipo:

    NOME_SEZIONE => Array articoli (contenente i vari articoli) => Array relativo ad un articolo (contiene i dati di interesse).

  4. #4
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    Ad esempio:

    codice:
    mio_xml = new XML();
    mio_xml.path = this;
    mio_xml.ignoreWhite = true;
    mio_xml.onLoad = function(success)
    {
    	if (success) {
    		this.path.newspaper = new Object();
    		var o = this.path.newspaper;
    		o._info = {titolo:this.firstChild.attributes.titolo, data:this.firstChild.attributes.data};
    		o._sezioni = [];
    		var nodes = this.firstChild.childNodes;
    		for (var i = 0; i < nodes.length; i++) {
    			var nome = nodes[i].attributes.nome;
    			o._sezioni.push(nome);
    			var children = nodes[i].childNodes;
    			o[nome] = {_articoli:children.length};
    			for(var j = 0; j < children.length; j++){
    				o[nome]["articolo_" + j] = {};
    				var grandchildren = children[j].childNodes;
    				for(var k = 0; k < grandchildren.length; k++){
    					o[nome]["articolo_" + j][grandchildren[k].nodeName] = grandchildren[k].firstChild.nodeValue;
    				}
    			}
    		}
    	} else {
    		trace("Caricamento Errato!");
    	}
    };
    mio_xml.load("./eNewspaper.xml");

  5. #5
    Grazie NegaTyve! Mi trovo un pò spiazzato di fronte a questo modo così raffinato di programmare... Dove posso reperire un pò di tutorial su come implementare queste strutture dati?


    Come faccio a derivare gli articoli relativi ad una data sezione? Come faccio a scandagliare tutta la struttura dati?

  6. #6
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    >Dove posso reperire un pò di tutorial su
    >come implementare queste strutture dati?

    leggendo qua e là..
    non te lo so dire, se vuoi farmi una domanda particolare ti rispondo volentieri

    >Come faccio a derivare gli articoli relativi ad una data sezione?

    allora, tu hai un oggetto che si chiama "newspaper". questo oggetto ha una proprietà, chiamata "_sezioni": si tratta di un array di titoli delle sezioni.
    Ad esempio:


    codice:
    trace(newspaper._sezioni); // traccia tutti i titoli
    ora, se ad esempio vuoi recuperare il titolo della prima sezione, scriverai:

    codice:
    titolo = newspaper._sezioni[0];
    per prendere la relativa sezione, scriverai

    codice:
    sezione = newspaper[titolo];
    a questo punto, la sezione contiene tanti oggetti quanti sono gli articoli che, non avendo nome, sono chiamati secondo il loro numero progressivo: "articolo_0", "articolo_1", ecc.

    quindi, per prendere il secondo articolo della sezione recuperata, scriverai:

    codice:
    articolo = sezione.articolo_1
    e per tracciarne il titolo:

    codice:
    trace(articolo.titolo)
    tutto questo giro è dovuto al fatto che tu, a priori, non sai il nome delle sezioni, perchè altrimenti potresti scrivere:

    codice:
    trace(newspaper.vacanze.articolo_1.titolo)

  7. #7
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    Comunque è meglio che guardi il debugger, per capire. Da una struttura così:

    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <newspaper titolo="prova" data="10.10.10">  
    	<sezione nome="vacanze">
    		<articolo numero="1">
    			<titolo>a</titolo>
    			<sottotitolo>b</sottotitolo>
    			<corpus>c</corpus>
    			<autore>d</autore>
    			<mp3>e</mp3>
    		</articolo>		
    		<articolo numero="2">
    			<titolo>f</titolo>
    			<sottotitolo>g</sottotitolo>
    			<corpus>h</corpus>
    			<autore>i</autore>
    			<mp3>j</mp3>
    		</articolo>		
    	</sezione>
    	<sezione nome="lavoro">
    		<articolo numero="1">
    			<titolo>a</titolo>
    			<sottotitolo>b</sottotitolo>
    			<corpus>c</corpus>
    			<autore>d</autore>
    			<mp3>e</mp3>
    		</articolo>		
    		<articolo numero="2">
    			<titolo>f</titolo>
    			<sottotitolo>g</sottotitolo>
    			<corpus>h</corpus>
    			<autore>i</autore>
    			<mp3>j</mp3>
    		</articolo>	
    		<articolo numero="3">
    			<titolo>k</titolo>
    			<sottotitolo>l</sottotitolo>
    			<corpus>m</corpus>
    			<autore>n</autore>
    			<mp3>o</mp3>
    		</articolo>		
    	</sezione>
    </newspaper>
    hai questa struttura chiusa:



    e questa aperta:


  8. #8
    Ho constatato che la prima volta che carico l'applicazione ho un undefined se eseguo il trace, mentre se ritorno al MC precedente va tutto a posto. Comunque grazie davvero! Ma come si usa il debugger in Flash? Come hai fatto a visualizzare in modo grafico la struttura del file XML?

  9. #9
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    Devi premere Ctrl+Shift+Invio per avviare la modalità prova filmato con il debugger, dal quale vedi tutte le variabili del filmato.

  10. #10
    Scusate. Ho un problema probabilmente banale... Devo derivare il titolo dell'articolo e per questo ho bisogno del seguente codice:

    codice:
    var titolo_articolo = sezione.articolo_i.titolo
    dove "i" è una variabile che va da 0 a "sezione._articoli"

    Come faccio a concatenare la variabile "i" nel modo corretto?

    codice:
    for(var i=0; i<sezione._articoli; i++){
       
      var titolo_articolo = sezione.articolo_ + "i". + titolo;
      trace(titolo_articolo);
      
      trace(sezione.articolo_1.titolo);
      _root.elenco_articoli_mc.label_elenco.text = titolo_articolo;
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.