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 stringachildNodes[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.