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
Referencia de ActionScript 3.0 para la plataforma de Adobe Flash
.
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 solo 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));