我用
创建了一个文件XmlDocument xmldoc = new XmlDocument();
我可以将此文件设为可下载吗?没有保存它?
答案 0 :(得分:3)
您可以执行以下操作:
XmlDocument doc = new XmlDocument();
doc.LoadXml(@"<xml>myxml</xml>");
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment;filename=MyXmlDocument.xml");
Response.AddHeader("Content-Length", doc.OuterXml.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.Write(doc.OuterXml);
答案 1 :(得分:1)
这是:
xmldoc.Save(Response.OutputStream)
不要忘记设置响应mime类型和其他相关属性,以便客户端浏览器将其理解为文件下载。
答案 2 :(得分:0)
您需要查看编写自定义HTTP处理程序(实现IHttpHandler
的类)并在web.config中注册它。有关如何设置一个的好例子,请参阅this article on MSDN。
以下是一个基本示例,说明如何实现一个返回XmlDocument
的标记。
using System.Web;
public class MyXmlDocumentHandler : IHttpHandler
{
public static XmlDocument XmlDoc
{
get;
set;
}
public MyXmlDocumentHandler()
{
}
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/xml"; // Set the MIME type.
XmlDoc.WriteTo(context.Response.OutputStream); // Write the XML markup to the respone stream.
}
public bool IsReusable
{
// To enable pooling, return true here.
// This keeps the handler in memory.
get { return false; }
}
}
答案 3 :(得分:0)
与Noldorin发布的内容不同,您不必创建自定义HTTP处理程序。
如果要下载XmlDocument类创建的XML文档,可以始终将其直接保存到流中,并将其内容类型设置为text/xml
。
或多或少像以下代码:
XmlDocument xmldoc = new XmlDocument();
/*
* ... more code ...
*/
this.Response.ContentType = "text/xml";
xmldoc.Save(this.Response.OutputStream);
答案 4 :(得分:0)
您需要回复对它的请求,将文档保存到响应中。当然,您需要以某种方式获取 XmlDocument
- 如果您在一个请求中创建了它(例如页面),您将需要能够基于参数重新创建它,在会话中缓存它(具有所有正常的警告)。
有关将其写出的示例,请在正常Page
范围内执行:
xmldoc.Save(Response.OutputStream);
或
xmldoc.Save(Response.Output);
您可以轻松地创建.ashx文件和相关的代码隐藏(新的“Generic Handler”项),然后在代码隐藏中实现IHttpHandler
实现ProcessRequest
:
public void ProcessRequest(HttpContext context)
{
XmlDocument doc = ...;
doc.Save(context.Response.OutputStream);
}
您可能还想设置适当的内容类型(可能是“text / xml”,除非它是您希望以不同方式解释的特定XML格式)等。如果您希望客户端默认保存它,那么您应设置内容处理。