0

我有一些用 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(内容)保存为文件?

4

4 回答 4

1

默认情况下,您不能。出于安全原因,浏览器不应该访问您的本地磁盘。

但是,如果您可以要求您的用户更改其安全设置(并且您不应该要求),您可以使用FileSystemObject甚至您的Microsoft.XMLDOM.Save方法。

于 2010-01-18T20:31:55.330 回答
1

使用默认安全设置的 100% 客户端 JavaScript 无法做到这一点。您需要实现一些服务器端逻辑。在您的情况下,您也可以在服务器端进行 XML 转换。

http://www.bigresource.com/Tracker/Track-javascripts-ijfTJlI9/

http://support.microsoft.com/kb/q260519/

于 2010-01-18T20:32:43.583 回答
1

您可以构造一个 data: URI,其媒体类型为application/octet-stream.

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 转换为字符串。

于 2010-01-18T20:40:32.693 回答
0

我使用博客上的代码片段来执行此操作(用户可以单击保存按钮,该片段将出现在他们的默认文本编辑器中,他们可以在其中对其进行调整和/或将其复制到他们的应用程序中)。

它的工作原理是将所有文本数据放在隐藏字段中,然后将其提交给一个非常简单的服务器端 HTTP 处理程序。处理程序只是抓取隐藏的字段值,并使用正确的 content-disposition 标头在响应中将其立即吐出,为用户提供打开/保存下载提示。

这是我可以让它工作的唯一方法。

于 2010-01-18T22:20:34.507 回答