I specifikationen ECMAScript för XML definieras en uppsättning klasser och funktioner för att arbeta med XML-data. Dessa klasser och funktioner kallas gemensamt för
E4X.
I ActionScript 3.0 finns följande E4X-klasser: XML, XMLList, QName och Namespace.
Metoderna, egenskaperna och operatorerna i klasserna E4X har skapats med tanke på följande:
-
Enkelhet – Där det är möjligt gör E4X det enklare att skriva och förstå kod för att arbeta med XML-data.
-
Konsekvens – Metoderna och tankegångarna bakom E4X är konsekventa och överensstämmer med andra delar av ActionScript.
-
Förtrogenhet – Du använder välkända operatorer när du arbetar med XML-data, t.ex. punktoperatorn (
.
).
Obs!
Det finns en annan XML-klass i ActionScript 2.0. I ActionScript 3.0 har den klassen ändrat namn till XMLDocument så att den inte kommer i konflikt med XML-klassen i ActionScript 3.0 som är en del av E4X. I ActionScript 3.0 ingår de gamla klasserna – XMLDocument, XMLNode, XMLParser och XMLTag – i flash.xml-paketet för att produkten ska vara bakåtkompatibel. De nya E4X-klasserna är huvudklasser så du behöver inte importera ett paket för att använda dem. Information om de äldre XML-klasserna i ActionScript 2.0 finns i
flash.xml package
i
Referenshandbok för ActionScript 3.0 i Adobe Flash-plattformen
.
Här följer ett exempel på hur du använder E4X för att hantera data:
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>
Det är vanligt att programmet hämtar XML-data från en extern källa, t.ex. en webbtjänst eller en RSS-matning. Men i de kodexempel som anges här tilldelas XML-data som litteraler.
Som framgår av följande exempel innehåller E4X vissa intuitiva operatorer, som punktoperatorn (
.
) och attributidentifieraroperatorn (
@
), för att få åtkomst till egenskaper och attribut i 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
Använd metoden
appendChild()
för att tilldela en ny underordnad nod till XML enligt kodutdraget nedan:
var newItem:XML =
<item id="3">
<menuName>medium cola</menuName>
<price>1.25</price>
</item>
myXML.appendChild(newItem);
Använd operatorerna
@
och
.
inte bara för att läsa data utan också för att tilldela data enligt följande exempel:
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";
Använd en
for
-slinga för att iterera igenom XML-noder som i följande exempel:
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));