需要生成XML 的 HTML 報告和相應XSL布提必須使用的MemoryStream,而不是IO文件寫入服務器上的目錄。在大多數情況下,我設法創建一個XML生成XML和HTML從MemoryStream的
MemoryStream ms = new MemoryStream();
XmlWriterSettings wSettings = new XmlWriterSettings();
wSettings.Indent = true;
using(XmlWriter writer = XmlWriter.Create(ms,wSettings))
{
/**
creating xml here
**/
writer.Flush();
writer.Close();
}
return ms; // returning the memory stream to another function
// to create html
// This Function creates
protected string ConvertToHtml(MemoryStream xmlOutput)
{
XPathDocument document = new XPathDocument(xmlOutput);
XmlDocument xDoc = new XmlDocument();
xDoc.Load(xmlOutput);
StringWriter writer = new StringWriter();
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load(reportDir + "MyXslFile.xsl");
transform.Transform(xDoc, null, writer);
xmlOutput.Position = 1;
StreamReader sr = new StreamReader(xmlOutput);
return sr.RearToEnd();
}
以及我與創建HTML報告搞亂並不能弄清楚如何將該文件發送到客戶端的線某處。我沒有太多與memorystream合作的經驗。所以,任何幫助將不勝感激。謝謝。
非常感謝傑米。它似乎writer.ToString()正在生成我所需的html輸出,但我怎麼能夠以一種方式呈現,以便它打開在另一個瀏覽器選項卡作爲另一個html文件。任何想法 ?? – Sanjay
簡單的答案是,你不能從服務器端。您可以通過在HTTP頭中指定Content-Disposition來使瀏覽器顯示文件打開/保存對話框,但實際上會導致出現新的窗口或選項卡,必須使用客戶端代碼完成。有很多種方法可以做到這一點,例如在超鏈接或window.open javascript調用中指定目標屬性。 – JamieSee
在HTTP頭中指定Content-Disposition可以解決我的問題。我試圖** Response.AddHeader(「Content-Disposition」,「attachment; filename =」+ writer.ToString()+「.html」); **但最終我沒有得到一個HTML文件,但一個包含所有html標籤的文件。任何想法 ??謝謝 – Sanjay