需要生成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