PDA

Просмотр полной версии : Проблема с аттрибутами в XML


Prometei1599
17.02.2011, 21:36
Добрый вечер коллеги!
Имеется xml-файл:

<settings>
<mno cont="21">
<txt1>Первый заказчик</txt1>
<txt2>Второй заказчик</txt2>
<txt3>Третий заказчик</txt3>
</mno>
</settings>


И код, который занимается обработкой xml-файла:

var filesCount:Number = 0;

function XMLLoading(){
var xml_obj: XML = new XML();
xml_obj.ignoreWhite = true;

xml_obj.load("settings.xml");

xml_obj.onLoad = function(success:Boolean){
if(success){
filesCount = xml_obj.firstChild.childNodes[0].attributes.cont;
trace(filesCount);//выводит "21"
}
}
trace(filesCount);//выводит "0"
}

XMLLoadnig();

trace(filesCount);//выводит "0"

На экране появляются значения filesCount в следующей последовательности:
0
0
21
Т.е. получается, что событие load срабатывает после двух последних строчек trace(filesCount);

В чем я ошибся? Или что нужно добавить?

petyar
17.02.2011, 21:49
Событие срабатывает после окончания загрузки XML-документа. Естественно оно сработает позже, чем трейс сразу после вызова функции, вешающей событие.

Prometei1599
17.02.2011, 23:19
Чем можно отследить конец загрузки документа?

mooncar
17.02.2011, 23:44
У вас же уже есть отслеживание - функция-обработчик xml_obj.onLoad.
Все следующие действия с данными начинайте изнутри этого обработчика.
Его для того и придумали, чтобы отследить момент готовности загрузки XML-документа.
Для начала трейс поставьте и увидите.

Prometei1599
21.02.2011, 12:35
Т.е. эта функция является точной входа в программу, а данные из нее потом можно будет делегировать в другие функции?!

mooncar
21.02.2011, 14:34
Ну если в таких терминах, то да. Причем данные не обязательно передавать аргументом, просто после вызова следщующих действий они уже будут определены. Что-то вроде того:
xml_obj.onLoad = function(suc:Boolean)
{
if(suc)
{
//...парсим
//..работаем дальше
initNextAction();
}
};