Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Помогите с xml (http://www.flasher.ru/forum/showthread.php?t=213793)

0l3 19.01.2017 00:35

Такой вопрос меня волнует, опять пол дня ушло на безуспешные попытки:
как мне прочитать значение атрибута @b в неком елементе, если я знаю что значение его атрибута @a="10"?
Код:

<xml>
  <lvl1 a="10" b="100" />
  <lvl1 a="20" b="200" />
</xml>

Пытаюсь использовать xml.lvl1.(@a == "10") ..а дальше как лепить .@b? Или нужно создавать XMLList для результата или что, не пойму..

Ага ,вот по вашей ссылочке E4X прошел, там решение:
Код AS3:

var sales:XML = <sales vendor="Джон">
    <item type="горох" price="4" quantity="6"/>
    <item type="морковь" price="3" quantity="10"/>
    <item type="чипсы" price="5" quantity="3"/>
  </sales>;
 
trace(sales.item.(@type == "морковь").@quantity );


Nooob 19.01.2017 01:42

Чтобы точно узнать что возвращается используй toXMLString(), чтобы понять что делать дальше
Код AS3:

//вместо
trace(xml.lvl1.(@a == "10")); //
//использовать
trace(xml.lvl1.(@a == "10").toXMLString()); //<lvl1 a="10" b="100"/>
trace(<lvl1 a="10" b="100"/>.@b); //100
//значит
trace(xml.lvl1.(@a == "10").@b); //100


0l3 19.01.2017 02:08

Ложусь спать с надеждой на завтрашний день и новые знания =) Благодарю.

Не удержался, проверил полезность .toXMLString(), этого инструмента мне не хватало =)

0l3 23.01.2017 16:50

Казалось бы простая задача, но у меня вызывает трудности.. Пытаюсь обойти каждый узел дерева.
Когда делаю так..
Код AS3:

var xml:XML = <xml>
  <LVL0 name="lvl0">
    <LVL1 name="lvl1"/>
    <LVL1 name="lvl1"/>
      <LVL2 name="lvl2"/>
      <LVL2 name="lvl2"/>
    <LVL1 name="lvl1">
  </LVL0 name="lvl0">
</xml>
 
for each (var item:XML in xml..*.*)
{
  trace("=>", item.toXMLString(), "Parent:", item.parent().@name);
}

.. получаю только список LVL1. Маркер "=>" показывает обращение к узлу и оказался нужен так как trace() показывает не только елемент, а и его потомков, к которым реально обращения не происходит. Как это побороть и перебрать пошагово все узлы xml-дерева? Вариант с вложенными циклами мне не подходит так как я не знаю глубины дерева.. точнее она может измениться (LVL0.. LVLn).

_______________________
Нашел тему (http://www.flasher.ru/forum/showthread.php?t=123545) изучаю..

Wolsh 24.01.2017 01:35

Код AS3:

                        for each (var node:XML in xml.descendants())
                        {
                                trace(node.name().localName, "parent:", node.parent().name().localName);
                        }

Добавлено через 1 минуту
ну, или просто .@name если нужны атрибуты а не имена нод.

0l3 24.01.2017 02:33

И как я его не заметил =/ не внимательный.
Код:

descendants(name:Object = *):XMLList
Возвращает все потомки (дочерние объекты всех уровней) объекта XML, обладающие данным параметром имени.

Спасибо.

Nooob 24.01.2017 22:52

для обхода дерева c неизвестной глубиной используют рекурсию
Код AS3:

function print (xml:XML):void
{
        trace(xml.toXMLString());
        for each (var child:XML in xml.*)
        {
                print(child);
        }
}
print(xml);

или цикл со стеком
Код AS3:

var stack:Vector.<XML> = new <XML>[xml];
while (stack.length > 0)
{
        var node:XML = stack.pop();
        trace(node.toXMLString());
        var children:XMLList = node.*;
        for (var i:int = children.length() - 1; i >= 0; i--)
        {
                stack.push(children[i]);
        }
}

в зависимости от задачи

0l3 25.01.2017 01:49

А почему для стека используется Vector а не Array?

ZackMercury 25.01.2017 01:50

0l3, разница лишь в том, что Vector - типизированный. В любом случае можно использовать оба варианта.

0l3 25.01.2017 16:29

Я встречал код, в котором объекты экрана тоже добавлялись в список типа Vector и я подумал, что у него есть некие преимущества перед Array о которых я не знаю.. но это уже тема отдельного топика. Спасибо.


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

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