Форум 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=116167)

FreshFlashEr 22.09.2008 14:29

XML... Где и что я пропустил?
 
Три (вопроса) в одном (дабы не плодить кучу тем):
1) Нормально гружу xml, практически, можно с ней работать, но: как сохранить переменную из xml-загрузчика? так не идёт:(

Код:

(здесь load)... а вот потом...
var endVal:uint = 10; //как пример,(можно и не задавать начальное)
trace("before =" + endVal); // видим 10
function processXML(event:Event):void {
        theXML = new XML(event.target.data);
        endVal = theXML.elements().length();
        trace("inside ="+ endVal); // видим ТО ЧТО НАДО !
}
trace("after ="+ endVal); // опять видим 10

2) Скажем, по нажатию кнопки – хочу заменить уже загруженный xml-файл на другой. Как выгрузить (если это возможно)
или заменить один другим (третьим, четвертым) ?

3) Как из XML (точнее, её child-ов) сделать Array? И потом, вот такое:
выдернули значение из Array, показали, удалили (из Array-я) ?

Сорри, если прошу о многом, всё равно, заранее – спасибо!

amd333 22.09.2008 14:44

1) Скорее всего inside ты видишь позже чем after что говорит о том что у тебя ф-ция
processXML отрабатывает позже чем trace(after) естественно что и в переменную истинное значение устанавливается позже.
2) присваиваешь одной и той же переменной, а сборщик мусора при потре ссылки удалит.
3) for.... я бы наверное делал так, но что скажут авторитеты?.....

FreshFlashEr 22.09.2008 15:07

Спасибо, конечно. Да мне б, поподробнее немножко... Не то, чтоб тупой, скорее, новенький в этом деле. (Вот и тему, наверное, не в нужный раздел закинул)
1) Так как же её делать ? Почему, выходя из функции загрузки XML переменная не меняет значение на новое?
2) То есть по нажатию кнопки опять полностью прописывать процедуру загрцзки нового XML-файла?
3) вообще не понимаю (пока). Ньюб ещё... ;)

wvxvw 22.09.2008 15:24

Цитата:

3) Как из XML (точнее, её child-ов) сделать Array? И потом, вот такое:
выдернули значение из Array, показали, удалили (из Array-я)?
Вопрос, зачем. Как правило это не нужно, и проще пользоваться XMLList,
Но, если просто из спортивного интереса...
Код:

var xml:XML =
<xml>
        <node attr="1"/>
        <node attr="2"/>
        <node attr="3"/>
        <node attr="4"/>
        <node attr="5"/>
        <node attr="6"/>
</xml>;
var array:Array = [];
xml.*.(array.push(xml.*[array.length]));
for each(var xl:XML in array) trace(xl.toXMLString());


Alex Lexcuk 22.09.2008 15:35

Код:

var my_xml:XML;
my_xml = <params>
<Tom>23 years old</Tom>
<Bill>24 years old</Bill>
<Cat>4 years old</Cat>
<Dog>1 years old</Dog>
<Pigi>100 years old</Pigi>
<Прикол> Да уж... прикол так прикол </Прикол>
</params>


var i:int;
var time_out_xml:XML;
var name_string:String;
var x_arr:Array = new Array();
for (i=0; ; i++)
{
time_out_xml = XML(my_xml.child(i).toXMLString());
name_string = time_out_xml.name();
if (name_string==null) break;
x_arr.push(String(name_string+" = "+my_xml.child(name_string)+'\n'));
}
trace(x_arr);
/*OUTPUT
Tom = 23 years old
,Bill = 24 years old
,Cat = 4 years old
,Dog = 1 years old
,Pigi = 100 years old
,Прикол = Да уж... прикол так прикол
*/


FreshFlashEr 22.09.2008 15:36

Спасибо всем !
Тааак... догоняю (по-тихоньку)...
Второй вопрос снимается (если для XML не надо ничего выгружать/чистить вручную).

И я так понял, что только из Array-я можно сделать такой фокус как: "выдернуть-показать-удалить" ?

Хотябы маленькая подсказочка по первому вопросу (как сохранить значение переменной из XML-загрузчика) ??

Alex Lexcuk 22.09.2008 17:01

Пользоваться переменной после слова
Код:

trace("inside ="+ endVal); // видим ТО ЧТО НАДО !

FreshFlashEr 22.09.2008 17:22

Цитата:

Сообщение от Alex Lexcuk (Сообщение 765569)
Пользоваться переменной после слова

Мда... видимо, маленькой подсказочкой не обойтись.
А... какой переменной и после какого слова ? :rolleyes:
...Ну ОЧЕНЬ хочу разобраться...

wvxvw 22.09.2008 18:09

Для начала читаем документацию тут:
http://www.ecma-international.org/pu...s/Ecma-357.htm
Это то, что касается E4X.

Дальше читаем про синхронное и асинхронное выполнение кода тут:
http://en.wikipedia.org/wiki/Asynchronous_I/O
(Asynchronous Input/Output processing)

В двух словах: вы не вызываете функцию, в которой обрабатывается ХМЛ, она вызывается другим, инициированом вами процессом, но, этот процесс выполняется независимо от выполнения основного потока (вашего кода), это значит, что эта функция может, и скорее всего будет вызвана после выполнения блока кода, который ее описывает, возможно, много позже. Поэтому значение переменной, присваемое функцией, будет присвоено тогда, когда эта функция будет вызвана, а не тогда, когда вы захотите узнать, какое значение ей могло быть / может быть / может быть будет присвоено.

FreshFlashEr 22.09.2008 19:01

Спасибо! :drinks:
...пошёл учить (мат.часть) ;)


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

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