2010-01-18 103 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標題的響應中將其吐出,並向用戶提供打開/保存下載提示。

這是我能夠使其工作的唯一方法。

相關問題