Actionscript 2阅读XML
我在文件夹“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
但不起作用。
在那里添加一个额外的firstChild。我不是很确定为什么,但似乎解析器将整个文档视为一个单独的层次。
找不到解决问题的最佳方法是跟踪并查看它包含的内容。因此,从xml对象('trace(myXML)')开始,然后从'trace(myXML.firstChild)' - >'trace(myXML.firstChild.firstChild)' - >等遍历它,直到找到所需的信息。
您应该使用第三方库将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更改您的代码将破坏哪些是不好的...
感谢您的帮助。我试着用XML Parser使用上面的代码,但结果返回给我“速度是:[object Object]”。任何想法? – 2012-08-10 05:54:30
我错过了代码中的'nodeValue'。查看edite的答案。 – strah 2012-08-10 06:25:50
这实际上帮助我解决了这个问题。谢谢 :) – 2012-08-10 07:28:56