Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.05.2011, 12:12
shmblra вне форума Посмотреть профиль Отправить личное сообщение для shmblra Найти все сообщения от shmblra
  № 1  
Ответить с цитированием
shmblra

Регистрация: May 2011
Адрес: Севастополь
Сообщений: 15
Attention Парсинг XML

Доброго времени суток.

Столкнулся с маленькой проблемой, объясните как парсить правильно xml во флеш и как потом эти данные использовать...

вот пример:
Код AS3:
import flash.events.*;
import flash.xml.*;
 
var xmlLoader:URLLoader = new URLLoader (new URLRequest("xml/xml.xml"));
var xmlData:XML;
var xmlList:XMLList;
 
xmlLoader.addEventListener(Event.COMPLETE, getXML);
 
function getXML(e:Event):void {
	trace ("XML успешно загружен");
	trace (e.target.data);
	xmlData = XML(e.target.data);
	trace ("xmlData: " + xmlData);
	xmlList = xmlData.children();
	trace ("xmlList: " + xmlList);
}
в ходе выполнения скрипта возникает ошибка:
Код AS3:
TypeError: Error #1092: XML parser failure: Unterminated XML declaration.
	at game_fla::MainTimeline/getXML()
	at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction()
	at flash.events::EventDispatcher/dispatchEvent()
	at flash.net::URLLoader/flash.net:URLLoader::onComplete()
пример xml :
Код:
<?xml version="1.0" encoding="UTF-8">
<initGame>
<level id="1" small="images/small_1.jpg" big="images/big_1.jpg">
	<tags id="1" what="Часы" text="Очень холодно">
	<tags id="2" what="Секундомер" text="Очень холодно">
	<tags id="3" what="Кошка" text="Очень холодно">
	<tags id="4" what="Ботинок" text="Очень холодно">
	<tags id="5" what="Шлем" text="Очень холодно">
	<tags id="6" what="Бублик" text="Очень холодно">
	<tags id="7" what="Ложка" text="Очень холодно">
	<tags id="8" what="Рыба" text="Очень холодно">
</level>
</initGame>
я скинул только часть xml так как он очень большой.

а задача в том, чтобы эти данные можно было использовать.

т.е. как то вынести это в массив объектов ... чтобы это потом можно было использовать


Последний раз редактировалось shmblra; 04.05.2011 в 15:38.
Старый 04.05.2011, 16:41
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Ну, допустим нужно получить отсюда атрибуты тегов:
Код AS3:
function getXML(e:Event):void {
	xmlData = XML(e.target.data);
	var tags:XMLList = xmlData.level[0].tags;
           for (var i:String in tags) {
                   trace("id: " + tags[i].@id + ", text: " + tags[i].@text + ", what: " + tags[i].@what);
           }
}
Соответственно это можно прикрутить к переменным, и использовать их. Либо сформировать объекты, которые затолкать в обычный массив, либо еще как-нибудь.


Последний раз редактировалось goodguy; 04.05.2011 в 16:44.
Старый 04.05.2011, 16:44
shmblra вне форума Посмотреть профиль Отправить личное сообщение для shmblra Найти все сообщения от shmblra
  № 3  
Ответить с цитированием
shmblra

Регистрация: May 2011
Адрес: Севастополь
Сообщений: 15
Спасибо, буду пробовать

А что значит ошибка, что выше описал?

она меня очень смущает ...
ошибка в этом...
Код:
trace (e.target.data);
xmlData = XML(e.target.data);
а как исправить не знаю

Старый 04.05.2011, 16:47
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 4  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Кривой xml. Закрывать тег tags надо, например <tags id="1" what="Часы" text="Очень холодно"/>
Прямизну хмл я проверял на http://www.validome.org/xml/validate/ (поставить галку Well-Formedness only)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 04.05.2011, 16:56
shmblra вне форума Посмотреть профиль Отправить личное сообщение для shmblra Найти все сообщения от shmblra
  № 5  
Ответить с цитированием
shmblra

Регистрация: May 2011
Адрес: Севастополь
Сообщений: 15
Большое спасибо)))

Буду разбираться

Старый 04.05.2011, 17:08
surlac вне форума Посмотреть профиль Отправить личное сообщение для surlac Найти все сообщения от surlac
  № 6  
Ответить с цитированием
surlac
 
Аватар для surlac

блогер
Регистрация: Nov 2010
Сообщений: 143
Записей в блоге: 1
Цитата:
Сообщение от shmblra Посмотреть сообщение
как парсить правильно xml во флеш
Древовидные структуры можно обрабатывать по-разному: и вглубь и вширь. Смотря какую структуру данных хотите получить на выходе. Например в Вашем случае можно создать массив объектов следующим способом:
Код AS3:
public class Tag {
    var id:int;
    var what:String;
    var text:String;
 
    public Tag(i:int, w:String, t:String) {
        id = i;
        what = w;
        text = t;
    }
}
Код AS3:
 
var x:XML = new XML('<initGame> \
    <level id="1" small="images/small_1.jpg" big="images/big_1.jpg"> \
        <tags id="1" what="Часы" text="Очень холодно"/> \
        <tags id="2" what="Секундомер" text="Очень холодно"/> \
        <tags id="3" what="Кошка" text="Очень холодно"/> \
        <tags id="4" what="Ботинок" text="Очень холодно"/> \
        <tags id="5" what="Шлем" text="Очень холодно"/> \
        <tags id="6" what="Бублик" text="Очень холодно"/> \
        <tags id="7" what="Ложка" text="Очень холодно"/> \
        <tags id="8" what="Рыба" text="Очень холодно"/> \
    </level> \
</initGame> ');
var result:Array = new Array() /*of Tag*/;
for each(var e:XML in x.level.children()) {				
    result.push(new Tag(e.@id, e.@what, e.@text));
}
Результат - массив объектов класса Tag.


Последний раз редактировалось surlac; 04.05.2011 в 17:10.
Старый 04.05.2011, 17:24
Hidest вне форума Посмотреть профиль Отправить личное сообщение для Hidest Найти все сообщения от Hidest
  № 7  
Ответить с цитированием
Hidest
 
Аватар для Hidest

Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
Меня вот иногда интересует вопрос. А зачем вам что-то парсить? E4X сам по себе удобен, чтобы использовать XML напрямую, без лишних теловижений .

Единственное, что приходит в голову, когда это может понадобится - это если формат входных данных не один (+ json к примеру, или еще чего свое), и с разных инпутов надо получить единую структуру данных в проекте... Ну или же поддержка такой ситуации предполагается.

Однако парсить ради процесса, мне кажется, совсем нет необходимости .

Старый 04.05.2011, 17:36
shmblra вне форума Посмотреть профиль Отправить личное сообщение для shmblra Найти все сообщения от shmblra
  № 8  
Ответить с цитированием
shmblra

Регистрация: May 2011
Адрес: Севастополь
Сообщений: 15
Огромное всем спасибо

вроде бы понял что к чему

Старый 04.05.2011, 17:46
surlac вне форума Посмотреть профиль Отправить личное сообщение для surlac Найти все сообщения от surlac
  № 9  
Ответить с цитированием
surlac
 
Аватар для surlac

блогер
Регистрация: Nov 2010
Сообщений: 143
Записей в блоге: 1
Цитата:
Сообщение от Hidest Посмотреть сообщение
А зачем вам что-то парсить?
Для отделения основной программы от xml, например. Предположим есть система, которая не должна зависеть от структуры конфигурационных файлов(xml) - она принимает объекты, обладающие известным ей интерфейсом и работает с ними. В зависимости от xml подключается модуль-парсер, который генерит ей эти объекты.
В итоге при изменении структуры xml вместо одной библиотечки-парсера вы подсовываете другую, без изменения самой системы. Модульность.

Старый 04.05.2011, 17:53
Hidest вне форума Посмотреть профиль Отправить личное сообщение для Hidest Найти все сообщения от Hidest
  № 10  
Ответить с цитированием
Hidest
 
Аватар для Hidest

Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
Ну, это частный случай того подхода, что я описал - отказаться от xml, как внутреннего представления, задачи могут быть разные . Я спрашивал у автора, может это ему и не нужно, и он просто лишнее время тратит.

Создать новую тему Ответ Часовой пояс GMT +4, время: 05:31.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 05:31.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.