2011-02-28 193 views
3

我得到如下要求:如何用JavaScript创建和下载XML文件?

有一个网页上的链接。当用户点击链接时,它应该立即创建一个文件并弹出一个下载框。如何使用Java脚本来做到这一点?

+2

如果文件已经存在,只需要cr请求链接到该文件的URL。如果不是这种情况,我敢肯定你必须使用服务器端代码来做到这一点。 – 2011-02-28 14:53:42

+0

创建XML字符串是很简单的部分。在浏览器中合成一些东西变成一个“可下载”的文件很难,如果不是不可能的,它可以在所有(合理的)浏览器中运行。 – Pointy 2011-02-28 14:55:21

回答

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

编辑:这并不适用于火狐17+工作,因为改变特权被视为不安全并被删除。在这里看到更多的细节:https://bugzilla.mozilla.org/show_bug.cgi?id=546848#c57

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

这是一个很好的答案,荣誉。它也不是基于非标准的JS,如接受的答案。 +1。 – Michael 2013-06-21 13:56:53

11

您可以使用斑点如本例所示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(); 
+0

这太棒了!你甚至可以设置文件名和文件类型(MIME类型)。 – 7ochem 2015-08-24 19:37:01

+0

这就是我一直在寻找的感谢! ;) – chemic 2015-10-21 11:13:53

+0

这是这篇文章所有其他答案的最佳答案。谢谢! :) – 2016-06-03 09:18:27