如何使用javascript动态创建和下载XML文件?

时间:2011-02-28 14:51:38

标签: javascript xml excel

我的要求如下:

网页上有一个链接。当用户点击链接时,它应该动态创建一个文件并弹出一个下载框。如何使用java脚本?

5 个答案:

答案 0 :(得分:14)

尝试了安德烈亚斯所说的我会添加一些东西:

脚本:

function createAndOpenFile(){
    var stupidExample = '<?xml version="1.0" encoding="utf-8"?><aTag>something</aTag>';
    document.open('data:Application/octet-stream,' + encodeURIComponent(stupidExample));
}

你有一个像这样的链接,注意the new download atribute,你把它放在文件名。

<a href="#" onclick="createAndOpenFile()" download="file.xml">Donwload</a>

至少在Chrome 27和Firefox 21中有效。

欢迎改进: - )

答案 1 :(得分:14)

您可以使用此示例中显示的blob http://html5-demos.appspot.com/static/a.download.html

您可以使用以下代码

创建javacript函数
var xmltext = "<sometag><someothertag></someothertag></sometag>";
var pom = document.createElement('a');

var filename = "file.xml";
var pom = document.createElement('a');
var bb = new Blob([xmltext], {type: 'text/plain'});

pom.setAttribute('href', window.URL.createObjectURL(bb));
pom.setAttribute('download', filename);

pom.dataset.downloadurl = ['text/plain', pom.download, pom.href].join(':');
pom.draggable = true; 
pom.classList.add('dragout');

pom.click();

答案 2 :(得分:3)

您可以创建数据URI。大多数现代浏览器都应该能够理解它。见http://en.wikipedia.org/wiki/Data_URI_scheme

答案 3 :(得分:2)

如果用户信任您,您可以直接在他的文件系统中创建XML文件。 Mozilla Firefox的示例代码:

function mozillaSaveFile(filePath,content)
{
    if(window.Components) {
        try {
            netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
            var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
            file.initWithPath(filePath);
            if(!file.exists())
                file.create(0,0664);
            var out = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
            out.init(file,0x20|0x02,00004,null);
            out.write(content,content.length);
            out.flush();
            out.close();
            return true;
        } catch(ex) {
            return false;
        }
    }
    return null;
}

如果您需要支持所有浏览器,请参阅http://www.tiddlywiki.com

中的实施方式

编辑:这不适用于 Firefox 17 + ,因为更改权限被视为不安全并已删除。有关详细信息,请参阅此处:https://bugzilla.mozilla.org/show_bug.cgi?id=546848#c57

答案 4 :(得分:0)

decodeRequest(textToDecode) {

    var decodedString = atob(textToDecode);

    var fileName = "fileName1"+'_RQ';
    var fileType = '.xml';

    var blob = new Blob([decodedString], { type: fileType });

    var a = document.createElement('a');
    a.download = fileName;
    a.href = URL.createObjectURL(blob);
    a.dataset.downloadurl = [fileType, a.download, a.href].join(':');
    a.style.display = "none";
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
    setTimeout(function() { URL.revokeObjectURL(a.href); }, 1500); 

}