2012-08-09 95 views
0

我在文件夹“musics”中创建了一个名为“stage1.txt”的XML文件。 XML文件:Actionscript 2阅读XML

<music> 
    <speed>10</speed> 
    <time> 
     <note>1</note> 
     <note>12</note> 
     <note>32</note> 
     <note>41</note> 
    </time> 
    <where> 
     <lane>3</lane> 
     <lane>2</lane> 
     <lane>1</lane> 
     <lane>4</lane> 
    </where> 
</music> 

然后在flash文件我用下面的代码调用的XML文件:

,然后在flash文件我用下面的代码来获取数据。

var myXML:XML = new XML(); 
myXML.ignoreWhite=true; 
myXML.load("musics/stage"+_global.stages+".xml"); 
var temp = 0, temp2 = 0; 
myXML.onLoad = function(success){ 
if (success){ 
trace (myXML); 
} 
} 

它工作得很好,直到这里。但是,我想回想一下XML文件的第一个值,即“速度”。 我尝试使用此代码:

var speed = myXML.firstChild.firstChild.nodeValue; 

但它似乎并没有工作。 试过其他的东西,如:

myXML.firstChild.childNodes[0].nodeValue 

但不起作用。

回答

1

在那里添加一个额外的firstChild。我不是很确定为什么,但似乎解析器将整个文档视为一个单独的层次。

找不到解决问题的最佳方法是跟踪并查看它包含的内容。因此,从xml对象('trace(myXML)')开始,然后从'trace(myXML.firstChild)' - >'trace(myXML.firstChild.firstChild)' - >等遍历它,直到找到所需的信息。

+0

这实际上帮助我解决了这个问题。谢谢 :) – 2012-08-10 07:28:56

0

您应该使用第三方库将XML转换为对象 - 您可以使用Greensock的XMLParser - 有一个简短的教程和示例代码。

你的代码可能看起来像这样

import gs.dataTransfer.XMLParser; 
XMLParser.load("musics/stage"+_global.stages+".xml", onFinish); 
function onFinish($success:Boolean, $results:Object, $xml:XML):Void { 
    if ($success) { 
     trace("The speed is: "+$results.speed[0].nodeValue);1 

    } 
} 

,那么你可以参考你的XML的节点更方便(稳健)的方式:myMXL.speed[0].nodeValue

以某种方式引用节点是一种非常糟糕的做法。如果XML更改您的代码将破坏哪些是不好的...

+0

感谢您的帮助。我试着用XML Parser使用上面的代码,但结果返回给我“速度是:[object Object]”。任何想法? – 2012-08-10 05:54:30

+0

我错过了代码中的'nodeValue'。查看edite的答案。 – strah 2012-08-10 06:25:50