如何提示用户将文本 (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 或 CSV?

如何将 XML 文件(XmlDocument)的内容写入文本文件?

用户选择按钮时如何将数据保存在文本文件中

Scinillanet,如何将其文本保存到文件中?

如何使用 SaveFileDialog 将字符串生成器的内容保存到文本文件?

如何将GUI中的数据保存到文本文件(java)