2011-02-24 19 views
0

我有2d嵌套數組的問題,我想創建一個來自XML的。 我的XML(「的test.xml」)是這樣的:AS3如何從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代碼,我想使用只能創建嵌套陣列的這種方法,我敢肯定IA在做有什麼不對,但不知道在哪裏。

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:[email protected],state:[email protected],complex:usr.item,state:[email protected]}); 
    } 

    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

作爲一個側面提示:確保你正確縮進代碼(我修正了你的例子)。它使閱讀變得更加容易(因此更容易得到答覆),我敢肯定,在某些圈子裏,違反這條規則是一個可恥的罪行。 – cwallenpoole 2011-02-24 18:15:22

回答

0

哦,首先你需要讓我們知道你想看到什麼,你看到什麼,但這裏有一些問題我會解決:

不要使用的XMLDocument。這是ActionScript早期版本的一個延續。您應該只使用XML和XMLList(XMLListCollection在Flex中可用)。

你也不想使用parseXML(特別是因爲你已經有了一個可迭代的對象)。 var items:XMLList = result.children("item")會爲您提供結果中所有項目節點的列表。然後,您可以用var usr:XML in items替換var usr in result.item

在這一行:

var usr in result.item 

類型的變量。

在這一行:

level.push({name:[email protected],state:[email protected],complex:usr.item,state:[email protected]}); 

的USR對象不會有項目屬性。如果您想要節點本身,請將複數設置爲usr的值。

這條線:

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

會給你意想不到的效果。 complex屬性是XML。您想撥打toXMLString()

+0

thanx答覆。我不擅長as3,但所有我想要做的是,創建2d數組,所以爲了我希望通過級別[行] [列]。狀態,級別[行] [列] .complex訪問名稱,狀態和複雜...可能嗎? – hanna 2011-02-24 18:52:37