Показать сообщение отдельно
Старый 17.09.2011, 00:03
Spazm вне форума Посмотреть профиль Отправить личное сообщение для Spazm Найти все сообщения от Spazm
  № 4  
Ответить с цитированием
Spazm

Регистрация: Jul 2009
Сообщений: 20
goodguy, [Флеш не умеет читать php файлы, это дело апачи сервера.] - да я знаю, ну прошу прощения если я не правильно выразился. [где вообще код из флешки? Здесь форум по флешу, а не по php] - код брал с http://alt-f4.ru/actionscript-and-xml#comment-3182

Код класса парсера
Код AS1/AS2:
import mx.utils.Delegate; // подключаем Delegate class
class MyXml {
   var file:String; // адрес/имя xml-файла
   private var _xml:XML = null; // загруженный обьект xml
   public var _data:Object = null; // результирующий объект с данными
   // конструктор класса (аргумент - имя файла):
   public function MyXml(f:String) {
      this.file = f;
      this._xml = new XML(); // создаем объект xml
      // игнорировать текстовые узлы, содержащие только пробельные символы:
      this._xml.ignoreWhite = true;
      // указываем область действия обработчику:
      this._xml.onLoad = Delegate.create(this, xmlParser);
      this._xml.load(this.file); // начинаем загрузку xml-документа
   }
   private function xmlParser(success):Void {
      // метод load возвражает булевое значение - успешность загрузки:
      if (success) {
		  trace('k');
         this._data = new Object(); // инициализируем объект для данных
         var group = this._xml.firstChild.firstChild; // берем указатель на первый элемент
         while (group) { // и в цикле пробегаем по всем остальным
            var gr_id = group.attributes.gr_id;
            this._data[gr_id] = new Object();
            this._data[gr_id]['gr_name'] = group.attributes.gr_name;
            this._data[gr_id]['items'] = new Object;
            var item = group.firstChild; // первый ребенок группы
            while(item) { // цикл по детям
               var id = item.attributes.id;
               this._data[gr_id]['items'][id] = new Object();
               this._data[gr_id]['items'][id]['name'] = item.attributes.name;
               // для текстового нода в АС2 нужно брать firstChild, а потом уже nodeValue:
               this._data[gr_id]['items'][id]['description'] = item.firstChild.nodeValue;
               item = item.nextSibling;
            }
            group = group.nextSibling;
         }
      }
      // вызываем внешнюю функцию для распечатки (читай - использования) полученных данных,
      // параметр - прошла ли загрузка успешно
      _root.printXmlData(success);
   }
}
код в первом кадре
Код AS1/AS2:
//New_fall
var start_data_yes:Number;
 
onEnterFrame = function()
{
	if(String(start_data_yes)=="undefined")
	{
		start_data_yes=1;
		//Стартовали
		trace("Инициализация данных...");
 
		//_______________________________ Подключение класса вывода ______________________
		var trace_clss_ex:trace_clss = new trace_clss();//Подключаем класс trace_clss
		_global.trace_clss_ex = trace_clss_ex;
 
		_global.trace_clss_ex.setWindow(_root.trace_mc);
		_global.trace_clss_ex.setTrace("Подключен класс trace_clss");
 
		//_______________________________ Подключение класса данных пользователя ___________________________
		var user_data_clss_ex:user_data_clss = new user_data_clss();
		_global.user_data_clss_ex = user_data_clss_ex;
 
		_global.user_data_clss_ex.setFolderPath("game_xml_files");
		_global.user_data_clss_ex.setFileUserData("get_user_data_xml.php");
		_global.user_data_clss_ex.XMLDataUserLoad();
 
	}//end if
 
	if(_global.user_data_clss_ex.getDataUserIsset()==1)
	{
		//Если мы здесь - значит данные юзера успешно прочитались
		_global.user_data_clss_ex.setDataUserIsset(2);//Данные юзера прочлись, пометим временную ненужность получения повторных данных
 
		_global.trace_clss_ex.setTrace("данные юзера успешно прочитались");
 
		if(_global.trace_clss_ex.getXmlStatus()=="ok")
		{
			_global.trace_clss_ex.setTrace("подтверждение об успешности чтения");
		}//end if
		else
		{
			_global.trace_clss_ex.setTrace("лажа какая-то...");
		}//end if
 
 
	}//end if
 
		var t=_global.user_data_clss_ex.getXmlStatus();
 
		_global.trace_clss_ex.setTrace(t);
 
 
 
}//end onEnterFrame
 
import MyXml // подключаем класс
var myxml:MyXml = new MyXml('get_test_xml.php'); // создаем экземпляр - объект myxml
function printXmlData(succ:Boolean):Void {
   if (!succ) {
      trace('Возникла ошибка при попытке загрузить xml');
   }else {
	   trace('ok');
      // распечатываем наш объект с помощью двух вложенных циклов
      for (var gr_id in myxml._data) {
         trace(myxml._data[gr_id]['gr_name'] + ' [' + gr_id + ']');
         for (var id in myxml._data[gr_id]['items']) {
            trace('--' + myxml._data[gr_id]['items'][id]['name'] + ' [' + id + ']');
            trace('--' + myxml._data[gr_id]['items'][id]['description']);
         }
      }
   }
}
_____________________________________________________________________________
_____________________________________________________________________________
goodguy, спасибо большое за ответ - у меня сейчас нет времени проследовать вашим указаниям - смогу это сделать только через пару дней. Но я сразу напишу о результатах как только сделаю что вы сказали. Здорово было бы решить эту штуку - это важный момент и без него тяжело... конечно, на крайняк я смогу формировать из php xml код и сохранять его в файле, а флешем уже читать файл, но это ресурсозатратно будет((