Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   XML не могу получить узлы после пересылки в другой класс (http://www.flasher.ru/forum/showthread.php?t=131765)

Artic 27.10.2009 20:13

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 привязывается к классу ? оО

Xero201 27.10.2009 20:34

а что такое samedatainbase? Если это строка, то нужно сделать так:
Код AS3:

var myXML:XML = new XML(samedatainbase);


Artic 27.10.2009 20:53

сейчас проверить не могу, но вопрос насчет пересылки так же остается открытым
с базы все приходит так
Код 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 перестает отдавать узлы это факт !! (((((

Felicast 27.10.2009 21:28

вы либо работаете с xml как со строкой, либо я чего-то из вашего повествования не понял.
и еще вы в курсе что такое xmlns? на сколько я знаю его нельзя использовать в качестве атрибута

Artic 28.10.2009 01:13

вобщем я написал класс с этим 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 (Сообщение 861294)
вы либо работаете с xml как со строкой, либо я чего-то из вашего повествования не понял.
и еще вы в курсе что такое xmlns? на сколько я знаю его нельзя использовать в качестве атрибута

неа
а можно от него как то извабиться ? получить простой XML ??? так как видимо из за него есть ограниченность в использовании ( бред какой то, правда зачем XML ограничивать областью класса ? )


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

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

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

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


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

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