【问题标题】:AS3 how to access nested arrays from xml?AS3 如何从 xml 访问嵌套数组?
【发布时间】:2011-02-24 17:34:45
【问题描述】:

我遇到了二维嵌套数组的问题,我想创建一个来自 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);
        }
     }
}

【问题讨论】:

  • 附带说明:确保您正确缩进代码(我修复了您的示例)。它使阅读更容易(因此更有可能得到答复),而且我很确定在某些圈子中,违反该规则是一种可吊打的罪行。

标签: xml arrays actionscript-3 nested


【解决方案1】:

嗯,首先你需要让我们知道你看到了什么以及你想看到什么,但这里有一些我会解决的问题:

不要使用 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()

【讨论】:

  • 感谢您的回复。我不擅长 as3 但我想做的只是创建二维数组,所以对于 ex 我想通过 Level[row][column].state, Level[row][column].complex 访问名称、状态和复杂...有可能吗?
猜你喜欢
  • 1970-01-01
  • 2022-05-08
  • 1970-01-01
  • 2018-08-16
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
相关资源
最近更新 更多