Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Считывание XML (Ошибка: невозможно преобразовать [...] в XML) (http://www.flasher.ru/forum/showthread.php?t=131425)

Ynks 20.10.2009 14:03

Считывание XML (Ошибка: невозможно преобразовать [...] в XML)
 
Салют! Возникла такая вот задача (смотрим код):

Код AS3:

//Загрузка XML:
var xmlLloader:URLLoader = new URLLoader();
        xmlLloader.dataFormat = URLLoaderDataFormat.TEXT;
        xmlLloader.addEventListener(Event.COMPLETE, onLoadXML);
        xmlLloader.load(new URLRequest("newspaper4.xml"));
var newsPaper:XML = new XML;
function onLoadXML(event:Event):void
        {
                newsPaper = event.target.data;
        }

Выдает ошибку: "Error #1034: Ошибка типа Coercion: невозможно преобразовать [тут текст XML-файла] в XML"

Знаю, что можно сделать так и все будет работать:

Код AS3:

function onLoadXML(event:Event):void
        {
                var newsPaper:XML = new XML(event.target.data);
        }

Но мне нужно именно так, как я написал в первом варианте. Что изменить или как обхитрить, чтобы заработал мой первый вариант? Спасибо.

mre 20.10.2009 14:16

Зачем?

random13 20.10.2009 14:27

не знаю, могу только предположить
Код AS3:

var newsPaper:XML = event.target.data as XML

но действительно не вижу проблемы

mre 20.10.2009 14:33

random13, так не прокатит.

etc 20.10.2009 16:31

Значит вы ему не XML отдаёте.

Zebestov 20.10.2009 18:17

Если в этой строке:
Код AS3:

var newsPaper:XML = new XML(event.target.data);

не устраивает только то, что newsPaper становится локальным, то почему не:
Код AS3:

newsPaper = XML(event.target.data);

Сори, но я тупо не понимаю причины по которой имина шо необходимо писать без приведения типа 0_о ...может я чего-то не знаю...

Ynks 20.10.2009 20:36

Мне нужно, чтобы newsPaper была глобальной переменной, локальной ее делать никак не годится. Zebestov, спасибо, вариант работает. Но тогда другая проблема.
Сейчас уточню код:
Код AS3:

//Загрузка XML:
var xmlLloader:URLLoader = new URLLoader();
        xmlLloader.dataFormat = URLLoaderDataFormat.TEXT;
        xmlLloader.addEventListener(Event.COMPLETE, onLoadXML);
        xmlLloader.load(new URLRequest("newspaper4.xml"));
var newsPaper:XML = new XML;
function onLoadXML(event:Event):void
        {
                newsPaper = XML(event.target.data);
                trace(newsPaper); //Выводит содержимое XML-файла
        }
trace(newsPaper); //Выводит пустоту

А нужно, чтобы newsPaper в глобальной области тоже содержал текст XML-файла. Как, что и где объявить или сделать, чтобы добится результата? Спасибо.

Psycho Tiger 20.10.2009 21:08

Всё у вас верно.
Загрузка асинхронна, то есть мы ждем пока загружается xml, но код выполняем дальше и
Код AS3:

trace(newsPaper); //Выводит пустоту

выводит пустоту просто потому, что ещё ничего загрузить то не успел.

Ynks 20.10.2009 21:15

Хм... Пусть так. Тогда раскрываю след. код:
Код AS3:

//Загрузка XML:
var xmlLloader:URLLoader = new URLLoader();
        xmlLloader.dataFormat = URLLoaderDataFormat.TEXT;
        xmlLloader.addEventListener(Event.COMPLETE, onLoadXML);
        xmlLloader.load(new URLRequest("newspaper4.xml"));
 
var newsPaper:XML = new XML;
var newsCount:int;
function onLoadXML(event:Event):void
        {
                newsPaper = XML(event.target.data)
                newsCount = newsPaper.@count; //Присваивает 8 — так и должно быть
        }
newsCount = newsPaper.@count; //Присваевает пустоту, а должно присвоить 8

Как быть?

Psycho Tiger 20.10.2009 21:28

Код AS3:

var xmlLloader:URLLoader = new URLLoader();
        xmlLloader.dataFormat = URLLoaderDataFormat.TEXT;
        xmlLloader.addEventListener(Event.COMPLETE, onLoadXML);
        xmlLloader.load(new URLRequest("newspaper4.xml"));
 
var newsPaper:XML = new XML;
var newsCount:int;
function onLoadXML(event:Event):void
        {
                newsPaper = XML(event.target.data)
        myFunc();
        }
 
 
function myFunc():void{
newsCount = newsPaper.@count;
}



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

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