El enfoque E4X del procesamiento de XML

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

La especificación de ECMAScript for XML define un conjunto de clases y funcionalidad para trabajar con datos XML. Este conjunto de clases y funcionalidades se denomina E4X. ActionScript 3.0 incluye las siguientes clases E4X: XML, XMLList, QName y Namespace.

Los métodos, propiedades y operadores de las clases de E4X se han diseñado con los siguientes objetivos:

  • Simplicidad: siempre que sea posible, E4X facilita la escritura y comprensión del código para trabajar con datos XML.

  • Coherencia: los métodos y la lógica que subyacen a E4X son coherentes internamente y con otros componentes de ActionScript.

  • Familiaridad: los datos XML se manipulan con operadores conocidos, como el operador punto (.).

Nota: ActionScript 2.0 tenía una clase XML. En ActionScript 3.0 se ha cambiado su nombre a XMLDocument para que no entre en conflicto con la clase XML de ActionScript 3.0 que forma parte de E4X. Las clases antiguas (XMLDocument, XMLNode, XMLParser y XMLTag) se incluyen en el paquete flash.xml principalmente por compatibilidad con código antiguo. Las nuevas clases de E4X son clases principales; no es necesario importar un paquete para utilizarlas. Para obtener información sobre las clases XML heredadas de ActionScript 2.0, consulte el paquete flash.xml en ActionScript 3.0 Reference for the Adobe Flash Platform.

A continuación se muestra un ejemplo de manipulación de datos 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>

A menudo, la aplicación cargará datos XML desde un origen externo, como un servicio web o un canal RSS. No obstante, para mayor claridad, los ejemplos de código proporcionados asignan datos XML como literales.

Tal y como se muestra en el código siguiente, E4X incluye algunos operadores intuitivos, como el operador punto (.) y el operador de identificador de atributo (@), para acceder a propiedades y atributos en datos 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

El método appendChild() se utiliza para asignar un nuevo nodo secundario a los datos XML, como se indica en el siguiente fragmento de código:

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

Los operadores @ y . se utilizan no sólo para leer datos, sino también para asignar datos, como se indica a continuación:

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";

Se puede utilizar un bucle for para recorrer nodos de los datos XML, de la manera siguiente:

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));