AS3如何从xml访问嵌套数组?

时间:2011-02-24 17:34:45

标签: xml arrays actionscript-3 nested

我遇到了2d嵌套数组的问题,我想创建一个来自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 :(得分:0)

嗯,首先你要告诉我们你所看到的以及你想看到的内容,但这里有一些我要解决的问题:

不要使用XMLDocument。这是早期版本的ActionScript的延续。您应该只使用XML和XMLList(FlexList中提供XMLListCollection)。

您也不想使用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()