Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Парсинг txt/XML (http://www.flasher.ru/forum/showthread.php?t=180320)

leff27 31.05.2012 19:34

Парсинг txt/XML
 
Добрый вечер.
Имеется
Код AS3:

var myXML:XML = new XML();
var XML_URL:String = "config.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener("complete", xmlLoaded);
var lol:String = new String("lol");
function xmlLoaded(event:Event):void {
 
    myXML = XML(myLoader.data);
        var xmlDoc:XMLDocument = new XMLDocument();
    xmlDoc.ignoreWhite = true;
    var menuXML:XML = XML(myLoader.data);
    xmlDoc.parseXML(menuXML.toXMLString());
 
        for each (var ConfigItems:XML in myXML..ConfigureItems) {
 
            var textit:String = ConfigItems.textit.toString();
    }
}

Как вынести значение textit за функцию, т.е., чтобы можно было переменную использовать в другом метсе, а не только в пределах функции xmlLoaded?

DaFive 31.05.2012 19:44

Как вариант объявить её после var lol:String = new String("lol");

ChuwY 31.05.2012 19:48

Код AS3:

public class MyXMLLoader extends EventDispatcher{
  private var _text : String;
  public function MyXMLLoader(){
    ...
  }
 
  //*** public ***//
  public function get text():String{
    return _text;
  }
 
  //*** handlers ***//
  private function xmlLoaded(event:Event):void {
    ... // получаете конфиг
    var textit:String = configItems.textit.toString();
    dispatchEvent(new XmlLoaderEvent(XmlLoaderEvent.LOADED, textit));
  }
}
 
public class XmlLoaderEvent extends Event{
  public stataic const LOADED : String = "loaded";
  private var _text : String;
  public function XmlLoaderEvent(type : String, text : String){
    super(type);
    _text = text;
  }
}

Вот два варианта. Даже три.

1. Просто спрашивать, когда нужно text у экземпляра лоадера.
2. Диспетчить событие сразу с данными.
3. Диспетчить событие о том, что данные есть и уже после этого вытаскивать их.

leff27 31.05.2012 19:55

Я в классах не пишу

Цитата:

Сообщение от DaFive (Сообщение 1082369)
Как вариант объявить её после var lol:String = new String("lol");

Код AS3:

var textit:String;
var myXML:XML = new XML();
var XML_URL:String = "config.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener("complete", xmlLoaded);
function xmlLoaded(event:Event):void {
 
    myXML = XML(myLoader.data);
        var xmlDoc:XMLDocument = new XMLDocument();
    xmlDoc.ignoreWhite = true;
    var menuXML:XML = XML(myLoader.data);
    xmlDoc.parseXML(menuXML.toXMLString());
 
        for each (var ConfigItems:XML in myXML..ConfigureItems) {
 
            textit = ConfigItems.textit.toString();
    }
}

Так? Не работает

DaFive 31.05.2012 19:57

У меня работает вне функции. Вопрос в другом. Где нужна эта переменная?

з.ы. пишите в классах.

leff27 31.05.2012 20:05

Код AS3:

var textit:String;
var myXML:XML = new XML();
var XML_URL:String = "config.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener("complete", xmlLoaded);
var lol:String = new String("lol");
function xmlLoaded(event:Event):void {
 
    myXML = XML(myLoader.data);
        var xmlDoc:XMLDocument = new XMLDocument();
    xmlDoc.ignoreWhite = true;
    var menuXML:XML = XML(myLoader.data);
    xmlDoc.parseXML(menuXML.toXMLString());
 
        for each (var ConfigItems:XML in myXML..ConfigureItems) {
 
            textit = ConfigItems.textit.toString();
    }
}
trace(textit);

Трейс показывает null

В XML
Код:

<?xml version="1.0" encoding="utf-8"?>
<XML>
      <ConfigureItems>

        <textit>http://domain.ru/404.html</textit>
      </ConfigureItems> 
</XML>

Что не так?

ChuwY 31.05.2012 20:10

1. Пишите в классах.
2. Впрочем, продиспетчить событие можно и из кадра.
3. Трейс показывает null, потому что выполнение кода попадает на трейс до того, как выполнится функция
Код AS3:

xmlLoaded

, тк загрузка -- асинхронная операция.

leff27 31.05.2012 20:16

Спасибо! Через таймер работает.


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

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