E4X — strategia przetwarzania danych XML

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

Specyfikacja ECMAScript for XML definiuje zestaw klas i funkcji służących do pracy z danymi XML. Te klasy i funkcje nazywane są łącznie specyfikacją E4X. Język ActionScript 3.0 zawiera następujące klasy należące do specyfikacji E4X: XML, XMLList, QName i Namespace.

Metody, właściwości i operatory klas E4X zostały opracowane z myślą o:

  • Prostocie — tam, gdzie to możliwe, specyfikacja E4X ułatwia pisanie i interpretowanie kodu operującego na danych XML.

  • Spójności — metody i koncepcje, na których oparta jest specyfikacja E4X, są spójne wewnętrznie oraz spójne z innymi elementami języka ActionScript.

  • Podobieństwo do znanej składni — do manipulowania danymi XML służą dobrze znane operatory, takie jak operator kropki ( . ).

Uwaga: W języku ActionScript 2.0 dostępna była inna klasa XML. W języku ActionScript 3.0 jej nazwę zmieniono na XMLDocument, tak aby nie kolidowała z klasą XML, która w języku ActionScript 3.0 należy do specyfikacji E4X. W języku ActionScript 3.0 starsze klasy — XMLDocument, XMLNode, XMLParser oraz XMLTag — są zawarte w pakiecie flash.xml ze względu na zgodność wstecz. Nowe klasy E4X są klasami podstawowymi języka i aby ich używać, nie trzeba importować pakietu. Informacje o starszych klasach XML języka ActionScript 2.0 zawiera opis pakietu flash.xml w Skorowidzu języka ActionScript 3.0 dla platformy Adobe Flash .

Oto przykład manipulowania danymi przy użyciu elementów specyfikacji 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>

Często aplikacja będzie ładować dane XML ze źródła zewnętrznego, takiego jak usługa Web Service czy kanałRSS. Jednak, ze względu na czytelność, w przykładach kodu dane XML są przypisywane jako literały.

Tak, jak ilustruje to poniższy kod, specyfikacja E4X obejmuje kilka intuicyjnych operatorów, takich jak kropka ( . ) oraz identyfikator atrybutu ( @ ); operatory te zapewniają dostęp do właściwości i atrybutów w danych 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

Metoda appendChild() służy do przypisywania nowego węzła podrzędnego danym XML, co ilustruje poniższy wycinek kodu:

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

Operatory @ i . umożliwiają nie tylko odczytywanie danych, lecz również przypisywanie ich:

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

Pętla for umożliwia iteracyjne przeglądanie węzłów w danych XML, co zilustrowano poniżej:

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