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でこれらの値を取得する方法がわかりました。

たとえば、すべての「Events」タグを反復処理して、次のように「Absolute」値を取得できます。

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
}

編集:

2つのオプションがある場合noteon = []は、JavaScriptで行うのが最善ではなく、すべてをtry catchに入れるか、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 に答える