Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Оператор @ для несуществующего атрибута (http://www.flasher.ru/forum/showthread.php?t=106936)

zlatko 22.01.2008 11:37

Оператор @ для несуществующего атрибута
 
Для выборки нужных елементов из XmlList пользуюсь следующей конструкцией :

Код:

someList.children().(@someAttr == 'someValue');
Но проблема в том что у меня возможна ситуация когда атрибут someAttr не задан вообще. Тогда вылетает ошибка :

Цитата:

Error #1065: Variable @someAttr is not defined
В принцыпе логично, но как мне тогда поступать ? Проходить циклом весь список в поисках нужных елементов ?

wvxvw 22.01.2008 13:29

Код:

var _xml:XML = <data>
        <nodeA someAttr='111'>
                <nodeToTrace />
        </nodeA>
        <nodeB />
</data>;

var _xmll:XMLList = _xml.children().(attribute('someAttr') == '111');
trace(_xmll.toXMLString());


etc 22.01.2008 13:32

Код:

var xml:XML = <xml>
<item/>
<item>
        <item attr="test"/>
</item>
<item/>
<item/>
</xml>;
var list:XMLList = xml..*.(attribute('attr')=='test');
trace(list.toXMLString());


wvxvw 22.01.2008 13:35

Я вот тож думаю, а зачем проверять сначала наличие атрибута, а потом его еще с чем-то сравнивать... %)

zlatko 22.01.2008 17:36

Спасибо за примеры ! Помогло !

zlatko 22.01.2008 19:52

Гм...Теперь вот оказалось что к каждому елементу из результующего листа нужно добавить еще один атрибут - id його прямого родителя. Как я понимаю нужно с самого начала использовать цикл и обходить все елементы чтобы найти совпадения атрибута из нужным значением и тут же задать етому елементу новый атрибут - id родителя. Пожалуйста подтвердите что других способов нету, а то я не усну седня :)

etc 22.01.2008 20:09

Код:

var xml:XML = <xml id="0">
<item/>
<item id="1">
        <item attr="test"/>
</item>
<item attr="test"/>
<item/>
</xml>;
xml..*.(attribute('attr')=='test' && (parent().children()[childIndex()].@id=parent().@id));
trace(xml.toXMLString());


zlatko 22.01.2008 21:15

Как всегда я ошибался...Спасибо за красивое решение !

etc 22.01.2008 22:50

Вообще-то этот способ только визуально неплох. В реальности код превращается в тучу циклов, просто вы их не пишете.

wvxvw 23.01.2008 02:10

Если есть возможность модифицировать ХМЛ -- я бы использовал неймспейсы вместо размножения одинакового аттрибута для всех потомков...


Часовой пояс GMT +4, время: 14:25.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.