Search Flex Samples

The E4X approach to XML processing

The ECMAScript for XML specification defines a set of classes and functionality for working with XML data. These classes and functionality are known collectively as E4X. ActionScript 3.0 includes the following E4X classes: XML, XMLList, QName, and Namespace.

The methods, properties, and operators of the E4X classes are designed with the following goals:

Simplicity--Where possible, E4X makes it easier to write and understand code for working with XML data.
Consistency--The methods and reasoning behind E4X are internally consistent and consistent with other parts of ActionScript.
Familiarity--You manipulate XML data with well-known operators, such as the dot (.) operator.

Note: There was an XML class in ActionScript 2.0. In ActionScript 3.0 it has been renamed XMLDocument, so that it does not conflict with the ActionScript 3.0 XML class that is part of E4X. In ActionScript 3.0, the legacy classes--XMLDocument, XMLNode, XMLParser, and XMLTag--are included in the flash.xml package primarily for legacy support. The new E4X classes are core classes; you need not import a package to use them. This chapter does not go into detail on the legacy ActionScript 2.0 XML classes. For details on these, see the flash.xml package in the ActionScript 3.0 Language and Components Reference.

Here is an example of manipulating data with E4X:

var myXML:XML =


burger
3.95


fries
1.45




Often, your application will load XML data from an external source, such as a web service or a RSS feed. However, for clarity, the examples in this chapter assign XML data as literals.

As the following code shows, E4X includes some intuitive operators, such as the dot (.) and attribute identifier (@) operators, for accessing properties and attributes in the 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


Use the appendChild() method to assign a new child node to the XML, as the following snippet shows:

var newItem:XML =

medium cola
1.25


myXML.appendChild(newItem);


Use the @ and . operators not only to read data, but also to assign data, as in the following:

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


Use a for loop to iterate through nodes of the XML, as follows:

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

0 comments:

Related Flex Samples

Learn Flex: Flex Samples | Flex Video Tutorials Flex Examples