Спецификация ECMAScript для XML определяет набор классов и функций для работы с XML-данными. Эти классы и функции известны под общим названием
E4X.
ActionScript 3.0 включает следующие классы E4X: XML, XMLList, QName и Namespace.
Методы, свойства и операторы классов E4X разработаны для следующих целей.
-
Простота — где это возможно, E4X упрощает написание и понимание кода для работы с XML-данными.
-
Согласованность — методы и обоснования E4X изначально согласованы между собой и с другими частями ActionScript.
-
Узнаваемость — манипуляции XML-данными осуществляются с помощью хорошо известных операторов, таких как оператор «точка» (
.
).
Примечание.
В ActionScript 2.0. существует другой класс XML. В ActionScript 3.0 этот класс получил новое имя XMLDocument, чтобы избежать конфликта с классом XML ActionScript 3.0, являющимся частью E4X. В ActionScript 3.0 унаследованные классы XMLDocument, XMLNode, XMLParser и XMLTag включены в пакет flash.xml прежде всего с целью поддержки. Новые классы E4X являются основными классами, и нет необходимости в импорте пакета, чтобы можно было ими пользоваться. Сведения о старых классах XML в ActionScript 2.0 см. в описании
пакета flash.xml
в
cправочнике ActionScript® 3.0 для платформы Adobe® Flash® Platform
.
Далее приведен пример манипуляции данными с помощью 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>
Приложение часто загружает XML-данные из внешнего источника, такого как веб-служба или RSS-канал. Однако для ясности в приведенных здесь примерах кода данные XML назначаются в качестве литералов.
Как показывает следующий код, E4X включает несколько интуитивно понятных операторов, таких как «точка» (
.
), и операторов идентификатора атрибута (
@
) для получения доступа к свойствам и атрибутам в 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
Метод
appendChild()
используется с целью назначения нового дочернего узла для XML, как это показано в следующем фрагменте:
var newItem:XML =
<item id="3">
<menuName>medium cola</menuName>
<price>1.25</price>
</item>
myXML.appendChild(newItem);
Операторы
@
и
.
используются не только для чтения данных, но и для назначения данных, как это показано в примере ниже:
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";
Цикл
for
используется для осуществления повторений через узлы XML, как показано ниже:
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));