Hi -
I’ve researched this but I’ve not been able to find an answer.
I’m using an API in which one of the calls is to be able to get XML of an embed. I’m able to use the API perfectly fine for most other things.
How might I make this call from a button and have the XML be downloaded as a file?
the call is: getMusicXML()
The embed is located in a window identified as this: window.scoreView
So I basically just have this: window.scoreView.getNoteflightXML();
Obviously I need to have some other javascript to get this info in a downloaded XML file.
The particulars about this call from the API are as such:
Description:Returns the score contents in the embed client as a NoteflightXML string.
Usage Restrictions:Unless used by the score’s author, this function requires the score to allow copy and export.
Parameters: None.
Return Value: A NoteflightXML string representation of the score.
First, you have you small inconsistency in the above post - you mention both getMusicXML() and getNoteflightXML(); I assume what you really want is getMusicXML(), but the solution is basically the same for both. These are functions that return a promise, so to get at the XML data, you need to structure the code like:
window.scoreView.getMusicXML().done(function(scoreXML) {
// do something with scoreXML
console.log(scoreXML);
});
In your case, it looks like you want the file to be downloaded. So I found this code that takes a string and makes it into a downloadable file (though it looks like this particular solution might not work well with firefox):
window.scoreView.getMusicXML().done(function(scoreXML) {
function download(filename, text) {
var element = document.createElement('a');
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
element.setAttribute('download', filename);
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
download('score.xml', scoreXML);
});