I couldn’t place the excitement in the team last year when we announced support for E4X in AS3. As a newbie in the XML arena, ignorant of the XML parsing woes in Flash & of terms like XPath, i really didn’t think its a big deal. My views have changed… a lot.
The traditional way of dealing with XML in Flash is using the The XMLDocument, XMLNode and XMLNodeType Classes (checkout the flash.xml package in the live docs). Say you have an XML as follows as myXML (in an XMLDocument Object)
<employeeList>
<employee id=”475″>
<lastName>Zmed</lastName>
<firstName>Sue</firstName>
<position>Data analyst</position>
</employee>
<employee id=”348″>
<lastName>McGee</lastName>
<firstName>Chuck</firstName>
<position>Jr. data analyst</position>
</employee>
</employeeList>
In legacy AS2, if you want to access the employee id of McGee i.e. 348, you need to access as :
myXML.firstChild.childNodes[1].attributes.id
If you want the firstname of McGee i.e. Chuck, you need to access as:
myXML.firstChild.childNodes[1].childNodes[1].firstChild.nodeName
Come AS3 & E4X and life becomes a walk in the park. Declare the myXML as an XML Object (native e4X xml type in As3)
You want McGee’s id ??? here it is
(myXML..employee)[1].@id
myXML..employee generates an XMLList (another E4X compatible class) by parsing the XML to generate only XML nodes with employee as the node (with its children). So myXML..employee generates
<employee id=”475″>
<lastName>Zmed</lastName>
<firstName>Sue</firstName>
<position>Data analyst</position>
</employee>
<employee id=”348″>
<lastName>McGee</lastName>
<firstName>Chuck</firstName>
<position>Jr. data analyst</position>
</employee>
To get McGee’s FirstName…
(myXML..employee)[1].firstName
OR (myXML..firstName)[1]
Also, you can run XPath2.0 queries on the resultant XML.For e.g., consider the following statement…
(myXML..employee.(@id>400)
It returns all employee nodes in the xml that has an employee id>400, which in this case is “Sue Zemed”. Cool ! E4X Rocks…
Check out the XML & XMLList classes in the livedocs. If you need more info on E4X, refer the following links