L'approccio E4X all'elaborazione XML

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

La specifica ECMAScript for XML definisce una serie di classi e funzionalità per l'elaborazione dei dati XML. Tali classi e funzionalità sono definite globalmente E4X. ActionScript 3.0 comprende le seguenti classi E4X: XML, XMLList, QName e Namespace.

I metodi, le proprietà e gli operatori delle classi E4X sono stati progettati con gli obiettivi seguenti:

  • semplicità: laddove possibile, E4X rende il codice di gestione dei dati XML facile da scrivere e da capire;

  • uniformità: i metodi e la struttura fondanti di E4X sono uniformi tra loro e conformi alle altri porzioni di ActionScript;

  • familiarità: gli operatori per la manipolazione dei dati XML conosciuti, come l'operatore punto (.).

Nota: ActionScript 2.0 comprende una classe XML diversa. In ActionScript 3.0 questa classe è stata ridenominata XMLDocument, allo scopo di non creare un conflitto con la classe XML di ActionScript 2.0 che fa parte di E4X. In ActionScript 3.0, le classi precedenti - XMLDocument, XMLNode, XMLParser e XMLTag - sono state inserite nel pacchetto flash.xml per assicurare il supporto retroattivo. Le nuove classi E4X sono classi principali che per essere utilizzate non richiedono l'importazione di un pacchetto. Per ulteriori informazioni sulle classi XML ActionScript 2.0 precedenti, vedete il pacchetto flash.xml nella Guida di riferimento di Adobe ActionScript 3.0 per la piattaforma Adobe Flash.

Ecco un esempio di manipolazione di dati con E4X:

var myXML:XML =  
    <order> 
        <item id='1'> 
            <menuName>burger</menuName> 
            <price>3.95</price> 
        </item> 
        <item id='2'> 
            <menuName>fries</menuName> 
            <price>1.45</price> 
        </item> 
    </order>

Nonostante accada spesso che le applicazioni carichino i dati XML da un'origine esterna, come il servizio Web o un feed RSS, Per motivi di chiarezza, tuttavia, gli esempi presentati in questo capitolo assegnano valori letterali ai dati XML.

Come illustra la porzione di codice seguente, E4X comprende alcuni operatori intuitivi, come il punto (.) e l'identificatore di attributi (@) che vengono usati per accedere alle proprietà e agli attributi XML:

trace(myXML.item[0].menuName); // Output: burger 
trace(myXML.item.(@id==2).menuName); // Output: fries 
trace(myXML.item.(menuName=="burger").price); // Output: 3.95

Utilizzate il metodo appendChild() per assegnare un nuovo nodo secondario al codice XML, come illustrato nello snippet di codice seguente:

var newItem:XML =  
    <item id="3"> 
        <menuName>medium cola</menuName> 
        <price>1.25</price> 
    </item> 
 
myXML.appendChild(newItem);

Utilizzate gli operatori @ e . non solo per leggere i dati, ma anche per assegnarli, come illustrato di seguito:

myXML.item[0].menuName="regular burger"; 
myXML.item[1].menuName="small fries"; 
myXML.item[2].menuName="medium cola"; 
 
myXML.item.(menuName=="regular burger").@quantity = "2"; 
myXML.item.(menuName=="small fries").@quantity = "2"; 
myXML.item.(menuName=="medium cola").@quantity = "2";

Utilizzate un ciclo for per eseguire un'iterazione sui nodi XML, come illustrato di seguito:

var total:Number = 0; 
for each (var property:XML in myXML.item) 
{ 
    var q:int = Number(property.@quantity); 
    var p:Number = Number(property.price); 
    var itemTotal:Number = q * p; 
    total += itemTotal; 
    trace(q + " " + property.menuName + " $" + itemTotal.toFixed(2)) 
} 
trace("Total: $", total.toFixed(2));