PDA

Просмотр полной версии : XML парсер


vachtang83
03.12.2009, 13:14
На сайте адобе наткнулся на вот такой код:


package {
import flash.display.Sprite;
import flash.events.*;
import flash.net.*;

public class URLLoaderExample extends Sprite {

/**
* Link to XML file
*/
private var xmlURL:String = "http://test.xml";
/**
* XML data
*/
public var xmlData:XML;

public function URLLoaderExample() {
var loader:URLLoader = new URLLoader();
configureListeners(loader);

var request:URLRequest = new URLRequest(xmlURL);
try {
loader.load(request);
} catch (error:Error) {
trace("Unable to load requested document.");
}
}

private function configureListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.COMPLETE, completeHandler);
dispatcher.addEventListener(Event.OPEN, openHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}

private function completeHandler(event:Event):void {
var loader:URLLoader = URLLoader(event.target);
trace("completeHandler: " + loader.data);

var vars:URLVariables = new URLVariables(loader.data);
trace("The answer is " + vars.answer);
}

private function openHandler(event:Event):void {
trace("openHandler: " + event);
}

private function progressHandler(event:ProgressEvent):void {
trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
}

private function securityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler: " + event);
}

private function httpStatusHandler(event:HTTPStatusEvent):void {
trace("httpStatusHandler: " + event);
}

private function ioErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler: " + event);
}
}
}


на timeline (Actions) прописываю код:


var xmlLoader:URLLoaderExample = new URLLoaderExample;


хочется получить XML объект через этот класс, как поправильней это сделать?
изучаю AS3 и хочется всё сделать по правилам

За любую помощь буду очень благодарен

wvxvw
03.12.2009, 13:32
На том же сайте есть ссылка рядом с каждым примером

How to use examples (http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/ExampleInstruct.html)

vachtang83
03.12.2009, 15:40
На том же сайте есть ссылка рядом с каждым примером

How to use examples (http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/ExampleInstruct.html)

спасибо, может кто имеет свой парсер на AS3 былоб интересно проанализировать
структуру

Kuruki
03.12.2009, 20:12
У Колина Мука в книге про AS3 есть глава о XML с примерами парсинга, рекомендую.

Hidest
04.12.2009, 00:40
А зачем что-то вообще парсить самому? Неужели не хватит уже распарсенного XML-объекта (который получается при загрузки, если ему не помешать заранее) для своих нужд?

vachtang83
04.12.2009, 11:10
я хочу с помощью этого класса получить XML в FLA файле, а потом передать xML другому классу, разбираюсь сейчас

в fla загружаю var xml:xmlLoader=new xmlLoader(); только думаю как потом из fla XML получить, не судите строго я новичок пока

Добавлено через 5 минут
У Колина Мука в книге про AS3 есть глава о XML с примерами парсинга, рекомендую.

благодарю

Добавлено через 4 часа 51 минуту
Доброе время суток

Поставил себе задачу 1) загрузить данные из XML 2) распарсить 3) полученые данные закинуть в фильм

Думаю сделать так:

Создаю 3 класса: xml loader, parser, загрузчик объектов в мувик

примерчик adobe xml loader:

package {
import flash.display.Sprite;
import flash.events.*;
import flash.net.*;

public class URLLoaderExample extends Sprite {
public function URLLoaderExample() {
var loader:URLLoader = new URLLoader();
configureListeners(loader);

var request:URLRequest = new URLRequest("urlLoaderExample.txt");
try {
loader.load(request);
} catch (error:Error) {
trace("Unable to load requested document.");
}
}

private function configureListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.COMPLETE, completeHandler);
dispatcher.addEventListener(Event.OPEN, openHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}

private function completeHandler(event:Event):void {
var loader:URLLoader = URLLoader(event.target);
trace("completeHandler: " + loader.data);

var vars:URLVariables = new URLVariables(loader.data);
trace("The answer is " + vars.answer);
}

private function openHandler(event:Event):void {
trace("openHandler: " + event);
}

private function progressHandler(event:ProgressEvent):void {
trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
}

private function securityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler: " + event);
}

private function httpStatusHandler(event:HTTPStatusEvent):void {
trace("httpStatusHandler: " + event);
}

private function ioErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler: " + event);
}
}
}


далее в мувике прописал строчку:
var xml:URLLoaderExample =new URLLoaderExample ();

тут всё ок, создаётся объект и вижу trace моего кода и т.д.

Собственно застрял вот на чём. Хочу из класса в мувике получить xml объект.

пробывал в классе объевлять public var xmlData:XML;
потом прописывал в методе completeHandler
xmlData = new XML(loader.data);

и из мувика пытаюсь получить: xml.xmlData

но не проходит, поправьте меня пожалуйста. Хочется грамотно всё сделать и по правилам