|
|
|||||||||||||||||||||||||||||
|
XML и FLASH: подводные камниИсточник: flasher
В статье рассказывается о проблемах, с которыми вы можете столкнуться при применении связки xml + flash. Как известно чтобы меньше времени тратить на исправление ошибок, нужно эти самые ошибки не допускать, ну или, как говориться, учиться на чужих ошибках, вот этим и займёмся. Большинство ошибок в своём корне -это просто невнимательность, неосторожность или необдуманность принимаемых решений, так что прежде чем что-то сделать, нужно подумать о последствиях сделанного, так, например, когда вы создаёте xml объект и загружаете в него xml файл для дальнейшего использования, нередко возникает вопрос: "... а почему же xml не загрузился?". На него нельзя ответить однозначно, так как всё зависит от начальных условий. В первую очередь проверьте правильность имени файла загружаемого вами: xmlObject = new XML(); если вы допустили ошибку в написании имени, то исправьте его, так же следует обратить внимание на регистр букв используемых в имени файла, так как для некоторых файловых систем (напр. ext3, ext2) регистр букв имеет значение; таким образом, XmlFile.xml и xmlfile.xml это 2 разных файла. Следующей причиной может стать не существование самого xml файла. Далее вы можете столкнуться с тем что когда вы отлаживали флешку на локальной машине всё грузилось, а когда залили её в инет то xml грузиться перестал; тут всё очевидно - вам нужно написать прелоадер для xml. Я приведу пример простенького прелоадера, который помимо xml ещё и следит за загрузкой самого swf: Чтобы приготовить наш прелоадер нам нужно: Вот и готов наш прелоадер, принцип работы простой: всё как обычно за исключением 3 кадра, там мы просто в условие добавляем параметр. И таким образом у нас получается если(проценты < 100 ИЛИ xml-файл не загружен) { ждём; }. Ещё к проблемам загрузки внешних данных (не только xml) можно отнести такой любопытный факт: когда ваши файлы храняться в директории с именем cgi или cgi-bin то (!) флеш не хочет их загружать! Думаю это связано с внутренними механизмами зашиты flash (подробней об этом можно узнать из книги Колина Мука "ActionScript - справочник по языку"), так что лучше во избежание конфликтов размещать свои файлы в директориях с другими именами (я, например, даю имя директории в зависимости от того, какой внешний источник применяется). Ну вот наконец-то мы загрузили наш xml, чтобы удостовериться в этом, как говорится, воочию проделаем такие нехитрые действия: OutPut
Когда мы убедимся что, всё загружено и работает, то настало время приступить к обработке данных xml. ActionScript один из вариантов реализации: var info = xmlObject.firstChild.firstChild.attributes.param; info - переменная, в которую будет записано значение Если у вас присутствует большое количество элементов обращаться к ним по одному не удобно и громоздко, по этому напишем переборщик элементов:
for (var i = 0; i Из кода видно, что каждому элементу массива myArray начиная с 0 будет присвоено значение параметра param из каждого узла.
<ХМЛ> ---
xmlObject.firstChild.childNodes.length = 7 Ну вот мы и справились с возникшими проблемами, но это далеко не всё, что может помешать вам в достижении заветной цели. Так, например, в разных версиях flash player разная кодировка файла xml даёт совершенно непредсказуемые результаты обработки содержимого, на основе собственных наблюдения могу сказать, что flash player версии 1-5 хорошо работает с внешними данными поступающими в кодировке UTF-8, а flash player 6 и выше, предпочтительней работает с кодировкой UNICODE, в этом есть свои минусы и плюсы (в прочем, как и везде), вот, например когда я применял файлы в кодировке UTF-8 они читались многими старыми плеерами без проблем и отображались в браузерах, но русская буква "Я" никак не хотела отображаться, но с приходом UNICODE ситуация круто изменилась.
Если вы сталкиваетесь с какими-либо проблемами, не в коем случае не опускайте руки, а старайтесь придумать наиболее оптимальное, оригинальное, быстрое и простое решение, ну и, конечно, не забудьте поделиться им с другими. Обращаясь к основам программирования, могу сказать, что если проблема не имеет своего решения (или решение сложно реализуемо), то нужно менять начальные условия.
Весёлого программирования!
|
|