De E4X-aanpak voor XML-verwerking

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

De specificatie ECMAScript for XML definieert een set klassen en functionaliteit voor het werken met XML-gegevens. Deze klassen en functionaliteit worden samen E4X genoemd. ActionScript 3.0 bevat de volgende E4X-klassen: XML, XMLList, QName en Namespace.

De methoden, eigenschappen en operatoren van de E4X-klassen zijn ontworpen met de volgende doelstellingen:

  • Eenvoud: waar mogelijk maakt E4X het schrijven en begrijpen van codes voor werken met XML-gegevens eenvoudiger.

  • Consistentie: de methoden en de redenering achter E4X zijn intern consistent en zijn consistent met andere onderdelen van ActionScript.

  • Vertrouwdheid: u kunt XML-gegevens manipuleren met bekende operatoren, zoals de puntoperator ( . ).

Opmerking: ActionScript 2.0 heeft een andere XML-klasse. In ActionScript 3.0 is de naam van deze klasse gewijzigd in XMLDocument, zodat de naam niet conflicteert met de ActionScript 3.0 XML-klasse die deel uitmaakt van E4X.. In ActionScript 3.0 zijn de oudere klassen (XMLDocument, XMLNode, XMLParser en XMLTag) opgenomen in het pakket flash.xml met name ter ondersteuning van onderdelen uit oudere versies. De nieuwe E4X-klassen zijn kernklassen. U hoeft geen pakket te importeren om deze te kunnen gebruiken. Zie het flash.xml-pakket in de Naslaggids voor ActionScript 3.0 voor het Adobe Flash-platform voor meer informatie over de oudere XML-klassen van ActionScript 2.0.

Hierna volgt een voorbeeld van het manipuleren van gegevens met 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>

De toepassing laadt vaak XML-gegevens van een externe bron, zoals een webservice of een RSS-feed. Voor de duidelijkheid echter wijzen de codevoorbeelden die hier zijn opgegeven XML-gegevens toe als letterlijke gegevens.

Zoals wordt getoond in de volgende code, bevat E4X een aantal intuïtieve operatoren, zoals de puntoperator ( . ) en de operator voor kenmerkidentificatie ( @ ), voor toegang tot eigenschappen en kenmerken in 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

U kunt de methode appendChild() gebruiken om een nieuw onderliggend knooppunt toe te wijzen aan XML, zoals in het volgende fragment wordt getoond:

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

Gebruik de operatoren @ en . niet alleen gebruiken om gegevens te lezen, maar ook om gegevens toe te wijzen, zoals in het volgende voorbeeld:

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

U kunt als volgt een lus for gebruiken om knooppunten van XML te doorlopen:

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