2010-01-18 102 views
0

我已经有一些用XSLT转换XML的JavaScript代码。我现在希望用户能够保存新的XML(通过提示他们或者将新的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(内容)保存为一个文件?

+0

你想让它适用于IE以外的浏览器吗? – 2010-01-18 20:31:28

回答

1

默认情况下,你不能。浏览器是不应该访问本地磁盘出于安全考虑。

但,如果你可以要求你的用户改变它的安全设置(你不应该问),你可以使用FileSystemObject o r甚至可以使用Microsoft.XMLDOM.Save方法。

1

您可以构建一个数据: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转换为字符串。

0

我在代码片段my blog上执行此操作(用户可以点击保存按钮,代码片段会出现在默认的文本编辑器中,可以在其中调整和/或将其复制到应用程序中)。

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

这是我能够使其工作的唯一方法。

相关问题