1

假设我有一个这样的 XML 文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<MIDIFile>

  <Event>
    <Absolute>0</Absolute>
    <NoteOn Channel="1" Note="40" Velocity="64"/>
  </Event>
  <Event>
    <Absolute>236</Absolute>
    <NoteOff Channel="1" Note="40" Velocity="0"/>
  </Event>

</MIDIFile>

感谢一些很棒的教程,我现在知道如何在我的 javascript 中获取这些值。

例如,我可以遍历所有“事件”标签并获得“绝对”值,如下所示:

xmlhttp=new XMLHttpRequest();

xmlhttp.open("GET","test.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;

// make an array with all the events from the xml file
var events = xmlDoc.getElementsByTagName("Event")


for (var i = 0; i<events.length; i++)
console.log(events[i].getElementsByTagName("Absolute")[0].childNodes[0].nodeValue)

这将返回

0
236

现在,我怎么能访问“NoteOn”属性并获取它的值?我想遍历 XML 中的所有事件,看看它们是否包含 NoteOn 或 NoteOff 并加载一个包含所有音符、它们的持续时间、速度和通道的数组。

请帮我!getElementsByTagName("NoteOn")只是不起作用......如果它可能有帮助,这里有一些截图,如果我会发生什么console.log(xmlDoc)

提前非常感谢!

屏幕


编辑以响应答案。当我尝试这样做时:

var noteon = xmlDoc.getElementsByTagName('noteon');
console.log(noteon)

结果就是这个

[]

重新编辑:如果我写“NoteOn”而不是“noteon”,它会起作用!

4

1 回答 1

4
var noteon = xmlDoc.getElementsByTagName('noteon');
var note = new Array;
for(var i = 0; i < noteon.length; i++){
    note[i] = noteon[i].getAttribute('Note'); // or any of the attributes you want to get
}

编辑:

如果noteon = []那时你有 2 个选项,你可以把整个事情放在一个 try catch 中,而不是在 javascript 中做的最好的事情,或者你可以把它放在一个 if 语句中。像这样的东西应该工作:

var noteon = xmlDoc.getElementsByTagName('noteon');
var noteoff = xmlDoc.getElementsByTagName('noteoff');
var note = new Array;

if(noteon != []){
    for(var i = 0; i < noteon.length; i++){
        note[i] = noteon[i].getAttribute('Note'); // or any of the attributes you want to get
} else if(noteoff != []){
    for(var i = 0; i < noteoff.length; i++){
        note[i] = noteoff[i].getAttribute('Note'); // or any of the attributes you want to get
} else{
    return;  //makes sure the function returns to the call even if nothing was found
}
}
于 2012-05-23T23:23:51.610 回答