![]() |
парсинг xml :D
Есть XML такого вида:
Код:
<?xml version="1.0" encoding="utf-8" ?> |
Парсинг ... что именно вы хотите?
|
получить все значения айтимов name и info во flash.
|
Код:
var xml:XML = new XML ('<?xml version="1.0" encoding="utf-8" ?><Config> <Head>Основной текст</Head><TableHeadline><Name>имя</Name><Info>инфо</Info></TableHeadline><Objects><Item><Name>имя1</Name><Info>инфо1</Info></Item><Item><Name>имя2</Name><Info>инфо2</Info></Item></Objects></Config>'); |
у меня уже голова кругом идет от этого парсинга. Нигде толком ниче не могу найти. Итого имеется загружаемый descr.xml:
Код:
<?xml version="1.0" encoding="unicode"?>Начало такое: Код AS1/AS2:
|
Вот вам решение для вашего конфига, если поля находятся на _root и именуются Display1, Display2 ... :
Код AS1/AS2:
|
Спасибо за пример. Вроде все понял. Только вот матчасть у меня хромает.
Вычитал насчет XML.onLoad() : К моменту вызова события onLoad полученные данные уже разобраны методом parseXML и помещены в тело экземпляра XML. Тоесть походу parseXML автоматом парсит файл?? Не нужно его вызывать потом нигде?? И в какой момент именно вызывается этот parseXML?? В момент вызова load? И еще вопрос походу матчасти. Почему вызов функции loadXML идет раньше ее объявления?? Я просто пробую создать свою первую галерею на сайте без слайдшоу. Есть контейнер, с двумя кнопками (вперед, назад) и текстовое поле для вывода информации и фото (Display). Сейчас уже все работает, только не мог вывести описание файла. |
По поводу второго - вызов функции не идет раньше ее определения.
Все действия кода идут последовательно, все функции к тому времени уже определены (которые записаны так, как в моем примере). Просто для удобства я обычно все функции записываю внизу. А насчет метода parseXML - я им не пользуюсь, точно не скажу. Насколько я понимаю, метод предназначен для превращения строки в объект XML. И еще. Вот цитата из переведенного хелпа по AS2: Цитата:
|
У меня стоит задача вывести описание файла name на изображение, загружаемое по пути file, взятому из загруженного файла xml при запуске флэша. А также при каждом переходе к следующей/предыдущей фотографии.
Завтра с утра со свежей головой попробую через ваш пример сделать требуемое... |
Совет. Заносите при парсинге полученные данные в заранее объявленный массив (или массивы), чтобы потом можно из было оттуда брать при смене слайда.
|
Спасибо. С массивами работает все как надо, только при первой загрузке картинки в поле display отображается undefined. Никак не могу понять в каком порядке исполняется код?? Привык что сверху вниз, а тут не поймешь.
Еще вопрос насчет кодировки в XML. Как заставить флэш нормально работать с кириллицей? У меня элемент name в кириллице записан. При выводе получаются квадратики. Где-то читал, что в XML-файле для кириллицы нужно указывать кодировку юникод. Пробовал - не помогает. |
I. Насчет undefined. Видимо вам надо увязать момент отображения первой картинки с моментом загрузки и разбора конфига. То есть отображать слайд и когда конфиг уже распарсен и когда картинка уже загрузилась.
Я обычно пишу прелоадер, который загружает конфиг и все картинки (отрисовываю их в битмапу и кладу в массив). Конечно, сперва идет загрузка конфига, чтобы получить пути для загрузки картинок, потом гружу их с помощью MovieClipLoader. Также этот прелоадер у меня обычно следит за загрузкой всей флешки. Когда готово всё, перехожу к кадру с основным содержанием флешки. II. Насчет кодировки. Вообще-то флеш работает с UTF-8. Общие рекомендации для нормальной работы с кириллицей: 1. Сохраните XML в UTF-8. Одной записи <?xml version="1.0" encoding="UTF-8"?> в начале файла будет недостаточно. Нужно именно сохранить файл в кодировке UTF-8. Т.е. выбрать utf-8 при сохранении из текстового редактора (я, например, использую Notepad++, хотя и обычный Notepad умеет это делать). 2. Для нормального отображения в текстовых полях кириллицы часто нужно бывает внедрить шрифт. Как внедрять шрифт, на форуме неоднократно говорилось. Чтобы проверить, что у вас за проблема, локализуйте ее. Например, потрейсите внутри парсера (в данном случае парсером я называю разбор данных внутри обработчика onLoad) получаемые из файла данные. Если трейс показывает нормальный кириллический текст, а в поле он не отображается, или отображается неправильно, то проблема уже не в работе с XML, а в отображении кириллицы в поле, внедрение шрифта должно помочь. Ни в коем случае не используйте назначение свойства System.useCodepage = true. Если уж совсем будут проблемы, стучитесь. |
Еще раз спасибо. Действительно, мой редактор плохо сохранял в кодировке UTF-8, хотя в опциях было выставлено. Проблема с кодировкой решена.
Насчет undefined - запихнул строку отображения первого описания в саму функцию loadXML. Только вот не совсем понимаю последовательности исполнения кода программы. Стояла эта строчка вне, то есть после функции loadXML - было undefined. Тоесть, получается что сначала инициализируются/объявляются все пользовательские функции в программе, а потом уж начинается исполнение кода сверху вниз?? Или как?? В других языках программирования все на порядок в этом плане понятнее. Описание первой картинки подтягивается из первого элемента массива, который заполняется в теле функции loadXML. |
regman, все просто! Вы поступили верно.
Дело в том, что код AS работает асинхронно. Флеш - это в первую очередь интернет-технология и нуждается в учете полной загрузки чего-либо, того же динамического контента. Код AS будет исполняться сам по себе мгновенно, строка за строкой, невзирая на то, что что-то не успело загрузиться, если не принять мер. А вдруг скорость соединения с файлом 1 байт /с ? Тогда данные о подписях будут получены очень не скоро. А код последовательно выполнится практически мгновенно. И что-то может окажется undefined. Поэтому и введены обработчики событий. То есть все, что нуждается в данных из конфига, нужно начинать выполнять изнутри onLoad. Необязательно пихать туда весь код. А просто например, создать функцию инициализации, которую и вызывать изнутри onLoad, выполняя ею начальные действия. Ведь они-то хоть и начальные, но уже требуют загруженных данных. Те же картинки нужно грузить с помощью MovieClipLoader (есть событие onLoadInit), данные из файлов - класс LoadVars (события onLoad или onData). Это нужно для того, чтобы знать, когда можно приступать к действиям над загруженным контентом или использовать конфигурационные данные. Так что и тут все понятно. :) |
Спасибо. Теперь все более прозрачно :)
|
| Часовой пояс GMT +4, время: 23:06. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.