Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #26, ЯНВАРЬ 2003 г.

TIPS OF FLASH: В ЛЕСУ РОДИЛАСЬ ЕЛОЧКА

Iv (dembicki@narod.ru)

Спецвыпуск Xakep, номер #026, стр. 026-104-2


<?xml version="1.0" encoding="windows-1251" ?>

<prices header="Анализ цен на елки">

<firm name="Русская ель" price="80" />

<firm name="Норвежская ель" price="190" />

<firm name="Голубая ель" price="300" />

</prices>

Сохраняем my_data.xml. Проверяем его валидность открытием в эксплорере. (Рис. 2)

По содержанию этого файла можно догадаться, что мы будем сравнивать цены на елки в нашей фирме "Русская ель" с ценами на елки в конкурирующих фирмах. И делать это будем с особым цинизмом: в графическом виде.

ЗАПРОС И ПРОВЕРКА ДАННЫХ

TIPS 4

Не ленись четко прописывать trace. Не стесняйся писать в trace много и понятно. Это поможет вовремя заметить и исправить ошибки.

Поскольку в нашем XML присутствуют русские буковки, нужно предупредить систему использовать местную кодовую страницу. Делаем это в первой же строке. Далее создаем xml объект и загружаем в него наш файл с данными. На событие загрузки проверяем, успешна ли загрузка, хорош ли xml, и сообщаем об этом в окно вывода.

Вот как это все выглядит на Action Script:

System.useCodePage = true;

XML.prototype.ignoreWhite = true;

this.input_xml = new XML();

this.input_xml.load("my_data.xml");

this.input_xml.onLoad = function(success) {

if (success) {

if (this.status != 0) {

trace("invalid xml");

} else {

trace(this);

}

} else {

trace("error opening URL");

}

};

TIPS 5

На первый взгляд избыточная проверка XML на валидность ни к чему. Ведь мы проверили его в IE. Но не забывай, в дальнейшем тебе придется получать данные от серверного скрипта, и xml будет создавать серверный программист. И если он ошибется, то ты это сразу увидишь и будешь знать виновного.

ОБРАБОТКА XML

Поскольку мы только учимся пользовать XML во флэше, то, невзирая на простоту примера, подойдем к вопросу серьезно, по полной программе. Как большие. Для начала назначим каждому узлу xml свой ID, чтобы в дальнейшем к узлам обращаться напрямую, используя синтаксис вида any_xml[ID].

TIPS 6

Есть вещи, которые нельзя позволять никому. Не доверяй никому свою машину, жену/мужа и атрибут ID в xml. Только так ты будешь уверен в том, что сможешь взять любой узел по его ID и делать с ним все что захочешь.

Чтобы задать узлам xml уникальный идентификатор, будем пользовать мою функцию nextNode, без которой просто не представляю, как бы я обходился. Советую не набирать вручную, а взять вот здесь:

http://www.layer51.com/proto/d.aspx?f=440

Если появится желание понять, как она работает, то почитать можно здесь:

http://dembicki.narod.ru/tutor/a4.htm

// (с) Ivan Dembicki, dembicki@narod.ru

XMLNode.prototype.nextNode = function() {

if (this.firstChild != null) {

return this.firstChild;

}

var n = this;

while (n.nextSibling == null) {

if (n.parentNode) {

n = n.parentNode;

} else {

return null;

}

}

return n.nextSibling;

};

TIPS 7

Создай отдельный слой для прототипных функций. Если прототипных функций много, вынеси их во внешний .as файл и инклудь в первом кадре. Но и в том и в другом случае это должно быть в верхнем кадре, поскольку функции должны быть заданы до их вызова.

Назад на стр. 026-104-1  Содержание  Вперед на стр. 026-104-3