Просмотр полной версии : Парсинг txt/XML
Добрый вечер.
Имеется
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?
Как вариант объявить её после var lol:String = new String("lol");
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. Диспетчить событие о том, что данные есть и уже после этого вытаскивать их.
Я в классах не пишу
Как вариант объявить её после var lol:String = new String("lol");
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();
}
}
Так? Не работает
У меня работает вне функции. Вопрос в другом. Где нужна эта переменная?
з.ы. пишите в классах.
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>
Что не так?
1. Пишите в классах.
2. Впрочем, продиспетчить событие можно и из кадра.
3. Трейс показывает null, потому что выполнение кода попадает на трейс до того, как выполнится функция xmlLoaded, тк загрузка -- асинхронная операция.
Спасибо! Через таймер работает.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.