A abordagem E4X em relação ao processamento de XML

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

A especificação ECMAScript para XML define um conjunto de classes e recursos para trabalhar com dados XML. Em conjunto, essas classes e recursos são conhecidos como E4X. O ActionScript 3.0 inclui as seguintes classes E4X: XML, XMLList, QName e Namespace.

Os métodos, as propriedades e os operadores das classes E4X foram desenvolvidos com os seguintes objetivos:

  • Simplicidade - Sempre que possível, o E4X facilita a gravação e a compreensão do código para trabalhar com dados XML.

  • Consistência - Os métodos e princípios por trás do E4X são consistentes internamente e com outras partes do ActionScript.

  • Familiaridade – Você manipula os dados XML com operadores conhecidos, como o operador de ponto ( . ).

Nota: Há uma classe XML diferente no ActionScript 2.0. No ActionScript 3.0, essa classe foi renomeada como XMLDocument, de modo que não entra em conflito com a classe XML do ActionScript 3.0 que faz parte do E4X. No ActionScript 3.0, as classes herdadas (XMLDocument, XMLNode, XMLParser e XMLTag) são incluídas no pacote flash.xml principalmente para dar suporte a versões anteriores. As novas classes do E4X são classes básicas; não é necessário importar um pacote para utilizá-las. Veja os detalhes das classes antigas do ActionScript 2.0 XML em flash.xml package na Referência do ActionScript® 3.0 para Adobe® Flash® Platform .

Veja um exemplo de manipulação dos dados com 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>

Normalmente, seu aplicativo carregará dados XML a partir de uma fonte externa, como um serviço da Web ou um feed RSS. No entanto, para fins de clareza, os exemplos de código fornecidos aqui atribuem dados XML como literais.

Como mostra o código a seguir, o E4X inclui alguns operadores intuitivos, como os operadores de ponto ( . ) e de identificador de atributo ( @ ), para acessar propriedades e atributos no 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 o método appendChild() para atribuir um novo nó filho ao XML, como mostra o snippet a seguir:

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

Use os operadores @ e . não só para ler, mas também para atribuir dados do seguinte modo:

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 um loop for para percorrer os nós do XML do seguinte modo:

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