Получение данных из XML (E4X)
Как показывает практика, далеко не все знают об использовании оператора «..» и фильтрации при работе с XML. Для этого существуют очень удобные средства E4X (ECMAScript for XML)
Оператор «..»
Данный оператор позволяет получать данные потомков дерева XML вне зависимости от глубины их нахождения.
На примере:
У нас есть категоризованный список продуктов:
|
1 2 3 4 5 6 7 8 9 10 |
<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> |
Нам необходимо получить полностью все продукты вне зависимости от их категории:
|
1 2 3 4 |
var foodItems : XMLList = xml..item;
for each (var item : XML in foodItems) {
trace(item.toString());
} |
На выходе получим:
|
1 2 3 4 |
tomato
potato
orange
apple |
В сочетании с @ можно получить так же атрибуты:
|
1 |
var foodItems : XMLList = xml..item.@caloric; |
Такая запись выдаст абсолютно все атрибуты caloric, вне зависимости от того в каком элементе дерева они находятся
|
1 |
var foodItems : XMLList = xml..@caloric; |
Ну и для полной ясности.
Данная запись выдаст только фрукты:
|
1 |
var foodItems : XMLList = xml.fruits..item; |
В случае если осталось недопонимание, вы всегда можете ознакомиться с официальной документацией.
Фильтрация данных XML.
Фильтрация позволяет получить только те данные которые необходимы, а не все подряд. Осуществляется она при помощи указания данных в скобках.
Имеется список фильмов, которые мы можем купить в разных интернет магазинах:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<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.
|
1 2 3 4 |
var items : XMLList = xml..item.(shop == "ozon.ru");
for each (var item : XML in items) {
trace(item.toString());
} |
На выходе получим:
|
1 2 3 4 5 6 7 8 |
<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> |
Фильмы, которые стоят меньше ста рублей:
|
1 |
var items : XMLList = xml..item.(@price < 100); |
Фильмы, которые стоят больше ста рублей и продаются только в amazon.com:
|
1 |
var items : XMLList = xml..item.(@price > 100 && shop == "amazon.com"); |
В случае если осталось недопонимание, вы всегда можете ознакомиться с официальной документацией.
