Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.10.2009, 20:13
Artic вне форума Посмотреть профиль Найти все сообщения от Artic
  № 1  
Ответить с цитированием
Artic
Banned

Регистрация: Jun 2009
Сообщений: 298
По умолчанию XML не могу получить узлы после пересылки в другой класс

итак такая ситуация есть XML

Код:
<root>
  <type xmlns="PropertiesWindow">txt</type>
  <type xmlns="PropertiesWindow">photo</type>
  <type xmlns="PropertiesWindow">txt</type>
  <type xmlns="PropertiesWindow">txt</type>
  <type xmlns="PropertiesWindow">txt</type>
  <prop xmlns="PropertiesWindow"></prop>
  <prop xmlns="PropertiesWindow">"images/Menu2009927105854/mmmm/rootmenu/Untitled-1.jpg"</prop>
  <prop xmlns="PropertiesWindow"></prop>
  <prop xmlns="PropertiesWindow"></prop>
  <prop xmlns="PropertiesWindow"></prop>
  <pos xmlns="PropertiesWindow">4</pos>
  <pos xmlns="PropertiesWindow">5</pos>
  <pos xmlns="PropertiesWindow">6</pos>
  <pos xmlns="PropertiesWindow">7</pos>
  <pos xmlns="PropertiesWindow">8</pos>
</root>
кладу его в базу, как TEXT и при загрузки программы гружу, далее пытаюсь обратиться
Код:
var myXML:XML = samedatainbase
myXML.prop[1] // fail Oo ???
думаю, ну ладно ошибка где то в загрузке и т/д/ ( проверяю так )
trace(myXML), в окне дебага вижу полностью нужный мне XML, но узел получить так и не могу !!!
иду другим путем, перед загрузкой в базу ( после формирования ), пытаюсь обратиться к любому узлу
и вуаля, в классе PropertiesWindow в, котором и генериться этот XML, доступ есть и все видится, отсылаю через диспачевент в другой класс и пытаюсь обратиться там ! и опять fail

в чем я не прав ? и как сделать верно ? не ужели XML привязывается к классу ? оО

Старый 27.10.2009, 20:34
  № 2  
Ответить с цитированием
Xero201
Guest

Сообщений: n/a
а что такое samedatainbase? Если это строка, то нужно сделать так:
Код AS3:
var myXML:XML = new XML(samedatainbase);

Старый 27.10.2009, 20:53
Artic вне форума Посмотреть профиль Найти все сообщения от Artic
  № 3  
Ответить с цитированием
Artic
Banned

Регистрация: Jun 2009
Сообщений: 298
сейчас проверить не могу, но вопрос насчет пересылки так же остается открытым
с базы все приходит так
Код AS1/AS2:
private function answerServer(event:Event):void
{
    var x:XML = XML(event.target.data);
 
}
далее я его разбиваю на мелкие, алгоритм не важен, так, как разбивка идет на 3 основных, в одном из которых и есть приведенный XML и собственно, как отдельный узел его и получаю из основного ( другие узлы основного XML так же прекрасно трейсяться )

так вот, как я делаю
Код AS3:
var same:XML = x.child("sameNeedNode")[0];
trace(same) // получаю XML, который выше ,но не к одному его узлу не могу обратиться !
да и тут дествительно может помоч new XML, а вот что делать в этом случае:
создаю XML ,в классе PropertiesWindow, все узлы видятся, все хорошо ! далее создаю кастомное событие в котором через object пересылаю этот XML в другой класс

Код AS3:
диспач (new CustomEvent(same.same,{myXML:myXML},true)); // сорри за русский в названии метода просто забыл дословно как пишется ( автокомплит разучивает )
в другом классе
вешаю листенер и получаю данные
event.data.myXML и все ! трэйс XML выдает ! но узлы не доступны !!!

что за мистика то такая ?

PS я надеюсь все поняли, что CustomEvent это обычное расширение класса Event, в котором можно передать переменные, то есть есть класс наследуемый от Event и помимо всех своих обычных функций, у него есть еще переменная data:Object, в которой можно переслать, что требуется ,не каких конвертаций поидеи не происходит, но XML перестает отдавать узлы это факт !! (((((

Старый 27.10.2009, 21:28
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 4  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
вы либо работаете с xml как со строкой, либо я чего-то из вашего повествования не понял.
и еще вы в курсе что такое xmlns? на сколько я знаю его нельзя использовать в качестве атрибута
__________________
я могу стать всем, если только захочу

Старый 28.10.2009, 01:13
Artic вне форума Посмотреть профиль Найти все сообщения от Artic
  № 5  
Ответить с цитированием
Artic
Banned

Регистрация: Jun 2009
Сообщений: 298
вобщем я написал класс с этим XML
итак там схема такая
разбиваем XML на 3 Xml'я
( все поля все читается как нада )
далее из одного XML ( 1 ) берем узел в котором лежит еще один XML и создаем из этого узла XML далее пробую читать узлы созданного XML и получаю undefined
вобщем кодом будет более понятно

Код AS3:
package  
{
	import com.hexagonstar.util.debug.Debug
	import flash.display.Sprite;
	/**
	 * ...
	 * @author I
	 */
	public class SameTestXMLCLass extends Sprite
	{
 
		public function SameTestXMLCLass() 
		{
 
 
var commingXML:XML = 
<entire>
  <typeTBL>MENU</typeTBL>
 
  <unicObjectName><![CDATA[baseTemplate2009927235441]]></unicObjectName>
  <type><![CDATA[content]]></type>
  <contentbaseTemplate2009927235441hh><![CDATA[<root>
  <type xmlns="PropertiesWindow">txt</type>
  <type xmlns="PropertiesWindow">photo</type>
  <type xmlns="PropertiesWindow">txt</type>
  <type xmlns="PropertiesWindow">txt</type>
  <type xmlns="PropertiesWindow">txt</type>
  <prop xmlns="PropertiesWindow">&lt;P ALIGN="LEFT"&gt;&lt;FONT FACE="Times Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0"&gt;1&lt;/FONT&gt;&lt;/P&gt;</prop>
  <prop xmlns="PropertiesWindow">"images/Menu2009927235418/main/rootmenu/Untitled-1.jpg"</prop>
  <prop xmlns="PropertiesWindow">&lt;P ALIGN="LEFT"&gt;&lt;FONT FACE="Times Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0"&gt;2&lt;/FONT&gt;&lt;/P&gt;</prop>
  <prop xmlns="PropertiesWindow">&lt;P ALIGN="LEFT"&gt;&lt;FONT FACE="Times Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0"&gt;3&lt;/FONT&gt;&lt;/P&gt;</prop>
  <prop xmlns="PropertiesWindow">&lt;P ALIGN="LEFT"&gt;&lt;FONT FACE="Times Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0"&gt;4&lt;/FONT&gt;&lt;/P&gt;</prop>
  <pos xmlns="PropertiesWindow">4</pos>
  <pos xmlns="PropertiesWindow">5</pos>
  <pos xmlns="PropertiesWindow">6</pos>
  <pos xmlns="PropertiesWindow">7</pos>
  <pos xmlns="PropertiesWindow">8</pos>
  </root>]]></contentbaseTemplate2009927235441hh>
 
<typeTBL>interface</typeTBL>
 
  <interfaceX><![CDATA[0]]></interfaceX>
 
<typeTBL>template</typeTBL>
  <templateName><![CDATA[baseProduct]]></templateName>
</entire>
 
            var xml:XML = commingXML;
			var aLists:Array = [];
            xml.*.(localName().toString() === "typeTBL" ? aLists.unshift(<entire>{XMLList(valueOf())}</entire>) : aLists[0].* += valueOf());
            aLists = aLists.reverse();
			var menuXML:XML = aLists[0];
			var interfaceXML:XML = aLists[1];
			var templateXML:XML = aLists[2];
 
			var unicObjectName:String = "contentbaseTemplate2009927235441hh"
			var ss:XML = new XML(menuXML.child(unicObjectName)[0]);
			Debug.trace(ss.prop[1]+" IN SAMETEST") // undefined IN SAMETEST (((((( 
 
 
 
 
		}
 
	}
 
}
PS совсем не в тему, но вдруг кто то в теме: как в виртуалке расшарить буфер обмена ? а то я уже честно за .... лся через сторонии проги перегонять из FD в сафари )

Добавлено через 3 минуты
иерархия такая
Код:
<entire>
   <typeTBL>MENU</typeTBL>
      <unicObjectName><![CDATA[baseTemplate2009927235441]]></unicObjectName>
      <type><![CDATA[content]]></type>
      <contentbaseTemplate2009927235441hh>
          <root>
             <type xmlns="PropertiesWindow">txt</type>
               ....
          </root>
       </contentbaseTemplate2009927235441hh>
</entire>
Добавлено через 16 минут
так теперь пример пересылки
1 класс родитель так скажем

Код AS3:
package  
{
	import flash.display.Sprite;
	import flash.events.*;
	import com.hexagonstar.util.debug.Debug;
	/**
	 * ...
	 * @author I
	 */
	public class SameListenerClass extends Sprite
	{
 
		public function SameListenerClass() 
		{
			var n:SameTestXMLCLass = new SameTestXMLCLass();
			addChild(n);
			n.addEventListener(SameTestXMLCLass.SENDDATA, testData);
		}
		private function testData(event:CustomEvent):void
		{
			Debug.trace(event.data.dataXML.prop[1]+" IN SAME LISTENER");	
		}
	}
 
}
далее тот кто генерит и посылает данные
Код AS3:
package  
{
	import com.hexagonstar.util.debug.Debug
	import flash.display.Sprite;
	import flash.events.*;
	/**
	 * ...
	 * @author I
	 */
	public class SameTestXMLCLass extends Sprite
	{
		public static var SENDDATA:String = "senddata";
		public function SameTestXMLCLass() 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
 
 
		}
		private function init(event:Event = null):void
		{
 
			var commingXML:XML = generateData();
 
		}
		private function generateData():XML
		{
			var x:XML = new XML("<root/>");
			for (var i:int = 0; i < 10; i++ )
			{
				x.type[i] = i;
				x.prop[i] = i;
			}
			dispatchEvent(new CustomEvent(SameTestXMLCLass.SENDDATA, { dataXML:x }, true));
			return x;
		}
 
 
 
	}
 
}
ну и CustomEvent
Код AS3:
package  
{
	import flash.events.Event;
 
	/**
	 * ...
	 * @author I
	 */
	public class CustomEvent extends Event
	{
		private var _data:Object;
		public function CustomEvent(type:String,data:Object=null,bubbles:Boolean=false,cancelable:Boolean=false) 
		{
			super(type, bubbles, cancelable);
			_data = data;
		}
		public function get data():Object
		{
			return _data;
		}
	}
 
}
Добавлено через 19 минут
да, во всех примерах и везде, если трэйсить полностью XML, то он трейситься нормально
если трейсить отдельные узлы, например в классе создателя, то все тоже отлично

однако если переслать данные, то уже узлы не доступны и после сохранения и восстановления из базы, так же узлы уже undefined, хотя сами XML нормально выдаются ...

вобщем айнид хелп !!!

Добавлено через 50 минут
Цитата:
Сообщение от Felicast Посмотреть сообщение
вы либо работаете с xml как со строкой, либо я чего-то из вашего повествования не понял.
и еще вы в курсе что такое xmlns? на сколько я знаю его нельзя использовать в качестве атрибута
неа
а можно от него как то извабиться ? получить простой XML ??? так как видимо из за него есть ограниченность в использовании ( бред какой то, правда зачем XML ограничивать областью класса ? )


вобщем, кому не лень глянте примеры, которые я выше запостил, может найдете ошибку я уже не знаю куда смотреть, все упрощено до нескольких строк (((((

Добавлено через 56 минут
ну вот теперь я убежден что проблема в области видимости стоило переслать XML обратно в класс в котором он гененрировался как сразу узлы стали доступны !!!

итак как решать ??? как избавиться от этого злосчастного привязывание к классу ?

Добавлено через 7 часов 43 минуты
CLOSED ответ в namespace


Последний раз редактировалось Artic; 28.10.2009 в 01:17.
Создать новую тему Ответ Часовой пояс GMT +4, время: 00:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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