0

我在文件夹“musics”中创建了一个名为“stage1.txt”的 XML 文件。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 文件:

然后在闪存文件中,我使用以下代码获取数据。

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

但也不起作用。

4

2 回答 2

1

在其中添加一个额外的 firstChild。我不太确定为什么,但似乎解析器将文档作为一个整体处理为一个单独的级别。

当事情没有解决时,找到你需要的东西的最好方法是跟踪并查看它包含的内容。所以从 xml 对象 ('trace(myXML)') 开始,然后从那里遍历 'trace(myXML.firstChild)' -> 'trace(myXML.firstChild.firstChild)' -> 等,直到找到你需要的信息.

于 2012-08-09T20:52:15.053 回答
0

您应该使用第三方库将 XML 转换为 Object - 您可以使用 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 更改,您的代码将中断,这很糟糕......

于 2012-08-09T16:49:40.757 回答