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 файл и инклудь в первом кадре. Но и в том и в другом случае это должно быть в верхнем кадре, поскольку функции должны быть заданы до их вызова. |