Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript动态创建和下载XML文件?_Javascript_Xml_Excel - Fatal编程技术网

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

如何使用javascript动态创建和下载XML文件?,javascript,xml,excel,Javascript,Xml,Excel,我的要求如下: 网页上有一个链接。当用户点击链接时,它应该会动态创建一个文件,并弹出一个下载框。如何使用java脚本执行此操作?您可以创建一个数据URI。大多数现代浏览器都应该能够理解它。请参见如果用户信任您,您可以直接在他的文件系统中创建XML文件。 Mozilla Firefox的示例代码: function mozillaSaveFile(filePath,content) { if(window.Components) { try { ne

我的要求如下:


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

您可以创建一个数据URI。大多数现代浏览器都应该能够理解它。请参见

如果用户信任您,您可以直接在他的文件系统中创建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;
}
如果您需要对所有浏览器的支持,请参阅如何在中实现它


编辑:这对Firefox17+不起作用,因为更改权限被视为不安全且已被删除。请参阅此处了解更多详细信息:

尝试Andreas所说的内容后,我将添加一些内容:

脚本:

function createAndOpenFile(){
    var stupidExample = '<?xml version="1.0" encoding="utf-8"?><aTag>something</aTag>';
    document.open('data:Application/octet-stream,' + encodeURIComponent(stupidExample));
}
函数createAndOpenFile(){
var stupidExample=',使用它可以输入文件名

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

它至少可以在Chrome27和Firefox21中使用


欢迎改进:-)

您可以使用blob,如中所示

可以使用以下代码创建JavaScript函数:

var xmltext = "<sometag><someothertag></someothertag></sometag>";

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();
var xmltext=”“;
var filename=“file.xml”;
var pom=document.createElement('a');
var bb=新Blob([xmltext],{type:'text/plain'});
setAttribute('href',window.URL.createObjectURL(bb));
setAttribute('下载',文件名);
pom.dataset.downloadurl=['text/plain',pom.download,pom.href].join(':');
pom.draggable=true;
pom.classList.add('dragout');
pom.click();

如果该文件已经存在,只需创建指向该文件URL的链接。如果不是这样,我很确定您必须使用服务器端代码来完成此操作。创建XML字符串是简单的部分。将浏览器中合成的内容变为“可下载”文件是很困难的,如果不是不可能的话,也很难做到这一点(合理)浏览器。这是一个很好的答案,值得称赞。它也不像公认的答案那样基于非标准JS。+1。这很好!你甚至可以设置文件名和文件类型(mime类型)。这是这篇文章中所有其他答案中的最佳答案。谢谢!:)这在mac firefox中不起作用,它打开了包含内容的选项卡,而不是在mac Safarity中下载。更改应用程序/octet流的“text/plain”为什么你要声明两次
pom
?虽然这段代码可能解决了这个问题,但这是如何以及为什么解决了这个问题的这将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,您是在将来回答读者的问题,而不仅仅是现在提问的人。请在您的回答中添加解释,并说明适用的限制和假设。
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); 

}