我正在做一个MVC项目,该项目创建了一个用于XSLT转换的内存流。最后,我想在任何 Web 浏览器上显示转换的结果。以下是正在创建的内存流。
XslCompiledTransform xsl = new XslCompiledTransform();
xsl.Load(xsltpath);
MemoryStream stream = new MemoryStream();
XmlWriter xmlWriter = XmlWriter.Create(stream);
xsl.Transform(InputMessagePath, xmlWriter);
xmlWriter.Close();
// Pass or set the content of stream as a string or any other compatible type to the view to diplay
stream.Close();
是否可以在 Web 浏览器中显示内存流的内容?如果不可能,最好的方法是什么?我正在考虑创建临时文件并将其路径作为参数传递给System.Diagnostics.Process.Start(path)。但在此之前,最好知道使用 stream 对象而不是创建文件以在 Web 浏览器中显示内容的可能性。谢谢。
返回"FileResult"并在响应中设置内容类型:
您可以在此处找到文档:
http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.file%28v=vs.118%29.aspx
存在需要流的过载。
返回文件(流,"文本/html;字符集=UTF-8");
感谢您的回复。只是认为如果我发布我的实现,这对某人有用。
以下是我用于显示内存流内容的过程。我的要求是获取 XSLT 转换的编码 html 内容并在浏览器中显示。以下内容并不完全是我实现的。我简化了它以演示上述要求。
-------------型----------------------------------------
public class MyModel
{
public string EncodedOutputMessage { get; set; }
Public Transform()
{
// Do something
SetTransformResult(xsl, intputMsgPath);
}
private void SetTransformResult(XslCompiledTransform xsl, string intputMsgPath)
{
MemoryStream stream = new MemoryStream();
XmlWriter xmlWriter = XmlWriter.Create(stream);
xsl.Transform(intputMsgPath, xmlWriter);
xmlWriter.Close();
XmlDocument root = new XmlDocument();
stream.Position = 0; // rewind the pointer to the beginning of the stream
root.Load(stream);
XmlNodeList nodes = root.GetElementsByTagName("BodyXhtml");
if (nodes.Count == 1)
{
EncodedOutputMessage = HttpUtility.HtmlEncode(nodes[0].InnerXml);
}
stream.Close();
}
}
--------------控制器-----------------------------------
public class MyTestController : Controller
{
[HttpPost]
public ActionResult ShowResult()
{
MyModel model = new MyModel();
model.Transform();
ViewBag.DecodedOutputMessage = HttpUtility.HtmlDecode(model.EncodedOutputMessage);
return View("MyView");
}
}
----- 我的视图--------------------------------------------------------------
@model Tester.Models.MyModel
// Other fields to display
@Html.Raw(ViewBag.DecodedOutputMessage);
操作方法执行转换并获取编码的字符串,然后对其进行解码并将其发送到视图。我已经删除了大多数方法来简化此过程。
如果没有要在浏览器中显示的任何其他内容,则只能传递 HTML 字符串,如下所示。
public string Result()
{
string htmlRes = "<html><body><font color="red"> Testing color... </font></body></html>";
return htmlRes ;
}
我这样做:
MemoryStream stream = new MemoryStream(System.Text.UTF8Encoding.Default.GetBytes(xml));
XPathDocument document = new XPathDocument(stream);
StringWriter writer = new StringWriter();
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load(Server.MapPath("~/NFCe.xsl"));
transform.Transform(document, null, writer);
Response.Write(writer.ToString());
XML 结果将发送到客户端。在这种情况下,我有一个变量"xml"和我的原始 xml,他们正在应用包含在文件 NFCE.xsl 中的转换。Response.Write 将字符串写入输出流,该字符串将发送到客户端,而不是呈现的 aspx。