我遇到了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);
}
}
}
答案 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()
。