AS3 как получить доступ к вложенным массивам из xml? - PullRequest
0 голосов
/ 24 февраля 2011

У меня проблема с вложенными 2-мерными массивами, я хочу создать один из XML.Мой Xml ('test.xml') выглядит так:

<content>
<item image="Mike.jpg" name="Mike" state = "New York">
 <complex fid = "0"> ju675</complex>
 <complex fid = "1"> kyu49</complex>
</item>

<item image="John.jpg" name="John" state = "New Jersey" >
 <complex fid = "0"> mg749</complex>
 <complex fid = "1"> ks749</complex>
 <complex fid = "2"> ks678</complex>
    </item>

<item image="Smith.jpg" name="Smith" state = "California">
 <complex fid = "0"> we649</complex>
 <complex fid = "1"> sd449</complex>
 <complex fid = "2"> df459</complex>
 <complex fid = "3"> hj569</complex>
    </item>
</content>

А вот код AS3, который я использую, я хочу использовать только этот метод создания вложенного массива, я уверен, что яделать что-то не так, но не уверен, где.

 var level:Array = [];
 var complexes:Array = [];
 loadXML();
 function loadXML():void
 {
     var loader:URLLoader=new URLLoader();
     loader.addEventListener(Event.COMPLETE,completeXMLHandler);
     var request:URLRequest=new URLRequest('test.xml');
     try
     {
         loader.load(request);
     }
     catch(error:Error)
     {
         trace('Impossible to load the document.');
     }
 }

function completeXMLHandler(event:Event):void
{
    var loader:URLLoader=URLLoader(event.target);
    var result:XML=new XML(loader.data);
    var myXML:XMLDocument=new XMLDocument();
    myXML.ignoreWhite=true;
    myXML.parseXML(result.toXMLString());

    for each (var usr in result.item)
    {
        level.push({name:usr.@name,state:usr.@state,complex:usr.item,state:usr.@image});
    }

    for ( var row:int = 0; row < level.length; row++ )
    {
        trace(level[row].name);
        for ( var column:int = 0; column < level[row].length; column++ )
        {
            trace(level[row][column].complex);
        }
     }
}

1 Ответ

0 голосов
/ 24 февраля 2011

Ну, во-первых, вы должны сообщить нам, что вы видите и что хотите видеть, но вот некоторые проблемы, которые я бы исправил:

Не используйте XMLDocument. Это пережиток более ранней версии ActionScript. Вы должны использовать только XML и XMLList (XMLListCollection доступен во Flex).

Вы также не хотите использовать parseXML (тем более, что у вас уже есть повторяемый объект). var items:XMLList = result.children( "item" ) даст вам список всех узлов элементов в ваших результатах. После этого вы сможете заменить var usr in result.item на var usr:XML in items.

В этой строке:

var usr in result.item

введите вашу переменную.

В этой строке:

level.push({name:usr.@name,state:usr.@state,complex:usr.item,state:usr.@image});

объект usr не будет иметь свойства item. Если вы хотите, чтобы сам узел, установите complex в значение usr.

Эта строка:

trace(level[row][column].complex);

даст вам неожиданные результаты. Свойство complex является XML. Вы хотите позвонить toXMLString().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...