Получение данных из XML (E4X)
Как показывает практика, далеко не все знают об использовании оператора «..» и фильтрации при работе с XML. Для этого существуют очень удобные средства E4X (ECMAScript for XML)
Оператор «..»
Данный оператор позволяет получать данные потомков дерева XML вне зависимости от глубины их нахождения.
На примере:
У нас есть категоризованный список продуктов:
<food> <vegetables> <item caloric="2" isDietic="true">tomato</item> <item caloric="40" isDietic="false">potato</item> </vegetables> <fruits> <item caloric="4" isDietic="true">orange</item> <item caloric="26" isDietic="false">apple</item> </fruits> </food>
Нам необходимо получить полностью все продукты вне зависимости от их категории:
var foodItems : XMLList = xml..item; for each (var item : XML in foodItems) { trace(item.toString()); }
На выходе получим:
tomato potato orange apple
В сочетании с @ можно получить так же атрибуты:
var foodItems : XMLList = xml..item.@caloric;
Такая запись выдаст абсолютно все атрибуты caloric, вне зависимости от того в каком элементе дерева они находятся
var foodItems : XMLList = xml..@caloric;
Ну и для полной ясности.
Данная запись выдаст только фрукты:
var foodItems : XMLList = xml.fruits..item;
В случае если осталось недопонимание, вы всегда можете ознакомиться с официальной документацией.
Фильтрация данных XML.
Фильтрация позволяет получить только те данные которые необходимы, а не все подряд. Осуществляется она при помощи указания данных в скобках.
Имеется список фильмов, которые мы можем купить в разных интернет магазинах:
<films> <item price="99.9"> <name>Batman and Robbin vs Darkwing Duck</name> <shop>ozon.ru</shop> </item> <item price="110.99"> <name>Желтый чемоданчик</name> <shop>ozon.ru</shop> </item> <item price="150"> <name>Валентайн Понтифик. Экранизация.</name> <shop>amazon.com</shop> </item> </films>
Нам необходимо получить фильмы которые продаются только в магазине ozon.ru.
var items : XMLList = xml..item.(shop == "ozon.ru"); for each (var item : XML in items) { trace(item.toString()); }
На выходе получим:
<item price="99.9"> <name>Batman & Robbin vs Darkwing Duck</name> <shop>ozon.ru</shop> </item> <item price="110.99"> <name>Желтый чемоданчик</name> <shop>ozon.ru</shop> </item>
Фильмы, которые стоят меньше ста рублей:
var items : XMLList = xml..item.(@price < 100);
Фильмы, которые стоят больше ста рублей и продаются только в amazon.com:
var items : XMLList = xml..item.(@price > 100 && shop == "amazon.com");
В случае если осталось недопонимание, вы всегда можете ознакомиться с официальной документацией.
