Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Не получается обратиться к ноду XML (http://www.flasher.ru/forum/showthread.php?t=156011)

Denisator 14.05.2011 15:14

Не получается обратиться к ноду XML
 
Есть вот такой XML:
Код:

<battle id1="000" back_url="res/back/lava.jpg" battle_type="blood" timeout="30000">
        <left id1="000" type="male" nick="Denisator" clan_name="Stalkers" clan_emblema_url="res/clan_emblema/stalkers.gif">
                <stats level="10" health="100" strength="5"/>
                <ammunition>
                        <head name="Шлем Хаоса" head_url="res/ammunition/head/chaos_helm.png">Сила +100\n Ловкость +30</head>
                        <hands></hands>
                        <hooks></hooks>
                        <body></body>
                        <legs></legs>
                        <foot></foot>
                        <weapon></weapon>
                        <shield></shield>
                </ammunition>
        </left>
        <right id="001" type="male" name="Xflat" clan_name="Stalkers" clan_emblema_url="res/clan_emblema/stalkers.gif">
                <stats level="10" health="100" strength="5"/>
                <ammunition>
                        <head name="Шлем Хаоса" head_url="res/head/chaos_helm.png">Сила +100\n Ловкость +30</head>
                        <hands></hands>
                        <hooks></hooks>
                        <body></body>
                        <legs></legs>
                        <foot></foot>
                        <weapon></weapon>
                        <shield></shield>
                </ammunition>
        </right>
</battle>

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

Код AS1/AS2:

 
var flooring:XML = new XML(data);
flooring.ignoreWhite = true;
 
_root.back = flooring.firstChild.attributes.back_url;
_root.helm = flooring.firstChild.firstChild.attributes.clan_emblema_url;
trace(_root.back); // трейс выдаёт "res/back/lava.jpg"
trace(_root.helm); // трейс выдаёт "undefined"


mooncar 14.05.2011 15:26

Верно вроде.
У меня
Код AS1/AS2:

trace(_root.helm)

выдает
Код:

res/clan_emblema/stalkers.gif
Но. Я проверяю с учетом асинхронности загрузки по отношению к выполнению кода, а у вас я этого не наблюдаю. Сделайте так и вы:
Код AS1/AS2:

var xmlData:XML = new XML();
xmlData.ignoreWhite = true ;
xmlData.onLoad = loadXML;
xmlData.load('config.xml');
 
function loadXML (success:Boolean)
{
        if (success)
        {
                var mainNode:XMLNode = this.firstChild ;
                _root.back = mainNode.attributes.back_url;
                _root.helm = mainNode.firstChild.attributes.clan_emblema_url;
                trace(_root.back);
                trace(_root.helm);
        }
        else
        {
                message_tf.text = 'Ошибка связи\nс конфигуратором данных xml';
        }
}


Denisator 14.05.2011 19:50

Асинхронность у меня учитывалась, но я её при цитировании кода убрал.

Код AS1/AS2:

        var lvSend:LoadVars = new LoadVars();
        var lvReceive:LoadVars = new LoadVars();
        lvSend.command = 'getBattleInf';
        lvReceive.onData = function(data) {
                //trace(data);
                _root.loading._visible = false;
                if (data == null) {
                        _root.textbox.text = 'error';
                } else {
                        var flooring:XML = new XML(data);
                        //_root.textbox.text = data;
                        flooring.ignoreWhite = true;
                        // По окончанию загрузки выводим содержимое XML документа
                        _root.back = flooring.firstChild.attributes.back_url;
                        _root.helm = flooring.firstChild.firstChild.attributes.clan_emblema_url;
                        trace(_root.back);
                        trace(_root.helm);
                        play();
                }
        };
        lvSend.sendAndLoad("battle.xml",lvReceive,'POST');
stop();


mooncar 14.05.2011 20:20

Тем не менее, сам парсинг у вас верный...
А что трейс показывает?
Код AS1/AS2:

....
var flooring:XML = new XML(data);
trace(flooring);
...

И кстати, вы отправляете POST'ом данные, они у вас там обрабатываются как-то? Какой-то скрипт отдает battle.xml?

Denisator 14.05.2011 20:22

Трейс показывает именно то что я написал в первом посте.
trace(_root.back); // трейс выдаёт "res/back/lava.jpg"
trace(_root.helm); // трейс выдаёт "undefined"
Тоесть первый нод показывает, а следующий нет.

Цитата:

И кстати, вы отправляете POST'ом данные, они у вас там обрабатываются как-то? Какой-то скрипт отдает battle.xml?
Пока я побращаюсь локально к battle.xml, однако потом я собираюсь получать XML от пхп скрипта которому я также мог бы слать флэшем команды.

mooncar 14.05.2011 20:30

Код AS1/AS2:

flooring.ignoreWhite = true ;
trace(flooring);

Посмотреть, какой XML получается из полученной строки, весь.
Там должно выводится все, что в первом посте у вас. Нормально с этим, без обрывов?

Добавлено через 6 минут
И все же, попробуйте мою схему, если заработает, след. шагом попробуете перевести на скрипт.

Denisator 14.05.2011 20:47

Цитата:

Сообщение от mooncar (Сообщение 996173)
Код AS1/AS2:

flooring.ignoreWhite = true ;
trace(flooring);

Посмотреть, какой XML получается из полученной строки, весь.
Там должно выводится все, что в первом посте у вас. Нормально с этим, без обрывов?

Поставил трейс, он выдал:
Код:

<battle id1="000" back_url="res/back/lava.jpg" battle_type="blood" timeout="30000">
        <left id1="000" type="male" nick="Denisator" clan_name="Stalkers" clan_emblema_url="res/clan_emblema/stalkers.gif">
                <stats level="10" health="100" strength="5" />
                <ammunition>
                        <head name="Шлем Хаоса" head_url="res/ammunition/head/chaos_helm.png">Сила +100\n Ловкость +30</head>
                        <hands />
                        <hooks />
                        <body />
                        <legs />
                        <foot />
                        <weapon />
                        <shield />
                </ammunition>
        </left>
        <right id="001" type="male" name="Xflat" clan_name="Stalkers" clan_emblema_url="res/clan_emblema/stalkers.gif">
                <stats level="10" health="100" strength="5" />
                <ammunition>
                        <head name="Шлем Хаоса" head_url="res/head/chaos_helm.png">Сила +100\n Ловкость +30</head>
                        <hands />
                        <hooks />
                        <body />
                        <legs />
                        <foot />
                        <weapon />
                        <shield />
                </ammunition>
        </right>
</battle>

Попробовал Ваш код и он всё правильно выдаёт. Но я не знаю как его перевести на работу со скриптом.

mooncar 14.05.2011 20:54

Вместо
Код AS1/AS2:

xmlData.load('battle.xml');

запиши что-то вроде
Код AS1/AS2:

xmlData.load('battle.php?command=getBattleInf');

То есть battle.php отдавать должен будет строку XML-ную, а вот принимать данные GET'ом, то есть в его начале такая строка будет:
PHP код:

$command = !_GET['command']; 

Другого решения сейчас в голову не приходит, с POST'ом, может кто подскажет. Вообще, у XML есть метод XML.sendAndLoad, может быть подойдет, я его сам не смотрел.

Denisator 14.05.2011 21:03

Спасибо, Луноход.
Буду делать по твоему способу.


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

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