Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Muoversi tra i nodi

Leggere il contenuto dei file XML.
Leggere il contenuto dei file XML.
Link copiato negli appunti

Cerchiamo ora di arrivare ad estrapolare solo i dati che ci servono muovendoci tra i nodi e gli elementi del documento XML. Modifichiamo quindi il codice Action Script in questo modo (es2.fla):

filexml = "orari.xml";
ApriXML();
  function ApriXML () {
 mioxml = new XML();
 myarray = new Array();
 mioxml.load(filexml);
 mioxml.onLoad = ElaboraXML;
  function ElaboraXML (success) {
  if (mioxml.loaded) {
   myarray = mioxml.firstChild.nextSibling.childNodes;
   trace ("Tot elementi = " + myarray.length);
   for (i=0;i<=myarray.length;i++){
    if (myarray[i].nodeName == "volo"){
    trace("elemento ["+i+"] ------------------")
   trace (myarray[i])                                                     
    }
   }
  };
 };
};

Ecco il contenuto della finestra di Output.

Tot elementi = 15
elemento [1] ------------------
<volo id="AZ1570">

  <partenza h="06:45">Cagliari</partenza>

  <arrivo h="07:50">Roma</arrivo>

 </volo>
elemento [3] ------------------
<volo id="AZ1572">

  <partenza h="07:20">Cagliari</partenza>

  <arrivo h="08:25">Roma</arrivo>

 </volo>
elemento [5] ------------------
<volo id="AZ1578">

  <partenza h="09:05">Cagliari</partenza>

  <arrivo h="10:10">Roma</arrivo>

 </volo>
elemento [7] ------------------
<volo id="AZ1574">

  <partenza h="10:50">Cagliari</partenza>

  <arrivo h="11:55">Roma</arrivo>

 </volo>
elemento [9] ------------------
<volo id="AZ1568">

  <partenza h="12:00">Cagliari</partenza>

  <arrivo h="13:05">Roma</arrivo>

 </volo>
elemento [11] ------------------
<volo id="AZ8111">

  <partenza h="12:00">Cagliari</partenza>

  <arrivo h="13.00">Roma</arrivo>

 </volo>
elemento [13] ------------------
<volo id="AZ1576">

  <partenza h="13:25">Cagliari</partenza>

  <arrivo h="14:30">Roma</arrivo>

 </volo>

Abbiamo un array composto da 15 elementi che sono a loro volta documenti XML. Tramite un ciclo for mandiamo nella finestra di Output solo gli elementi il cui nodeName sia uguale a "volo". Gli altri elementi dell'array sono invece elementi vuoti dovuti come abbiamo già detto agli spazi bianchi contenuti nell'XML.

Adesso proviamo ad osservare il nostro filmato in modalità Debug. Andiamo quindi su File > Impostazioni Pubblicazione > Flash e spuntiamo la voce "Debug consentito", e mandiamo nuovamente in esecuzione il nostro filmato. Col tasto destro accediamo al menù delle proprietà del filmato e clicchiamo su "Debugger". Ora clicchiamo su "_level0" e andiamo nella finestra variabili. Quello che vediamo all'interno della finestra di debug è proprio la struttura del nostro documento XML!

Osservando la struttura dell'albero XML ci risulterà più facile capire il significato di alcune proprietà che utilizziamo per muoverci tra i nodi dell'XML. 

Ad esempio, la riga di codice che abbiamo utilizzato in questo nostro esempio 

myarray = mioxml.firstChild.nextSibling.childNodes; 

ci permette di muoverci sul primo Nodo del nostro documento XML. Il primo nodo nel nostro caso è <?xml version="1.0" encoding="UTF-8"?> ovvero il nodo che indica la versione dell'XML (che come abbiamo detto potrebbe anche non essere utilizzato con Flash). Con nextSibling invece accediamo al nodo successivo che è il nodo <voli>. Con childNodes infine otteniamo una matrice dei nodi secondari al nodo <voli> che è costituita dall'insieme dei nodi <volo>. Ecco spiegato il contenuto dell'array "myarray".

Modifichiamo ora solo il corpo del codice all'interno del ciclo for e scriviamo (es4.fla):

trace("------------------")
    trace(myarray[i].attributes.id) 
    trace(myarray[i].childNodes[1].attributes.h)
    trace(myarray[i].childNodes[1].childNodes.toString())
    trace(myarray[i].childNodes[3].attributes.h)
    trace(myarray[i].childNodes[3].childNodes.toString())

Osserviamo l'Output su Flash:

Tot elementi = 15
------------------
AZ1570
06:45
Cagliari
07:50
Roma
------------------
AZ1572
07:20
Cagliari
08:25
Roma
------------------
AZ1578
09:05
Cagliari
10:10
Roma
------------------
AZ1574
10:50
Cagliari
11:55
Roma
------------------
AZ1568
12:00
Cagliari
13:05
Roma
------------------
AZ8111
12:00
Cagliari
13.00
Roma
------------------
AZ1576
13:25
Cagliari
14:30

Roma
 

Questa volta ci siamo!!! Abbiamo portato in Output solo i dati che ci interessano!

Osservando il codice vediamo che abbiamo utilizzato delle nuove proprietà:

  • attributes : ci permette di leggere gli attributi dei nodi XML
  • .toString() : restituisce il nodo XML selezionato in formato stringa
  • childNodes[n] : permette di accedere al nodo n-esimo nell'insieme dei nodi secondari

Un'altra considerazione che possiamo fare è che accediamo al nodo 1 e poi al 3! Fate attenzione! questo è dovuto agli spazi bianchi contenuti nel documento XML! Questo vuol dire che se modifichiamo l'XML aggiungendo degli spazi bianchi tra i vari nodi il nostro filmato non riesce più a leggere i dati correttamente!

A questo problema troveremo una soluzione nei prossimi capitoli.

Ti consigliamo anche