如何提示用户将文本 (xml) 保存到文件?
Posted
技术标签:
【中文标题】如何提示用户将文本 (xml) 保存到文件?【英文标题】:How do I prompt user to save text (xml) to a file? 【发布时间】:2010-01-18 20:25:12 【问题描述】:我有一些用 XSLT 转换 XML 的 javascript 代码。我现在希望用户能够保存新的 XML(通过提示他们或将新的 XML 作为文件或其他方式抛出,以便用户可以保存它。有人知道该怎么做吗?
var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
xmldoc.async = false;
xmldoc.loadXML(responseText); // responseText is xml returned from ajax call
//apply the xslt
var xsldoc = new ActiveXObject("Microsoft.XMLDOM");
xsldoc.async = false;
xsldoc.load("../xslt/ExtraWorkRequest.xslt");
var content = xmldoc.transformNode(xsldoc);
如何让用户将 XML(内容)保存为文件?
【问题讨论】:
你想让它在 IE 以外的任何浏览器上工作吗? 【参考方案1】:默认情况下,您不能。出于安全原因,浏览器不应访问您的本地磁盘。
但是,如果您可以要求您的用户更改其安全设置(并且您不应该要求),您可以使用FileSystemObject
甚至您的Microsoft.XMLDOM.Save
方法。
【讨论】:
【参考方案2】:您无法使用 100% 客户端 JavaScript 和默认安全设置来执行此操作。您需要实现一些服务器端逻辑。在您的情况下,您也可以在服务器端进行 XML 转换。
http://www.bigresource.com/Tracker/Track-javascripts-ijfTJlI9/
http://support.microsoft.com/kb/q260519/
【讨论】:
【参考方案3】:您可以构造一个媒体类型为application/octet-stream
的数据:URI。
function download (data, charset)
if (!charset)
charset = document.characterSet;
location.href = ["data:application/octet-stream;charset=",
charset, ",", encodeURIComponent(data)
].join("");
除 IE 之外的所有浏览器都支持数据:URI。我认为 IE8 可能支持它们,但仅适用于图像。对于 IE,解决方法可能是将数据发送到服务器(包括 document.characterSet
),然后加载具有以下标题的页面:
Content-Type: application/xml; charset=document.characterSet
Content-Disposition: attachment
如果您也想为文件命名,请使用Content-Disposition: attachment; filename=...
。
此外,要使上述任何一项工作,您必须先将 XML 转换为字符串。
【讨论】:
【参考方案4】:我在my blog 上使用代码 sn-ps 来执行此操作(用户可以单击保存按钮,sn-p 将出现在他们的默认文本编辑器中,他们可以在其中对其进行调整和/或将其复制到他们的应用程序)。
它的工作原理是将所有文本数据放在一个隐藏字段中,然后将其提交给一个非常简单的服务器端 HTTP 处理程序。处理程序只是抓取隐藏的字段值,并在响应中使用正确的 content-disposition 标头将其吐回,为用户提供打开/保存下载提示。
这是我让它工作的唯一方法。
【讨论】:
以上是关于如何提示用户将文本 (xml) 保存到文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 XML 文件(XmlDocument)的内容写入文本文件?