Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何制作由XmlDocument()创建的可下载文件_Asp.net_Xml - Fatal编程技术网

Asp.net 如何制作由XmlDocument()创建的可下载文件

Asp.net 如何制作由XmlDocument()创建的可下载文件,asp.net,xml,Asp.net,Xml,我已经创建了一个带有 XmlDocument xmldoc = new XmlDocument(); 我可以将此文件设置为可下载文件吗?在不保存它的情况下?您会想看看如何编写一个自定义HTTP处理程序(一个实现IHttpHandler的类),然后简单地在web.config中注册它。有关如何设置的示例,请参见 下面是一个基本示例,说明如何实现一个返回XmlDocument的标记 using System.Web; public class MyXmlDocumentHandler : IHt

我已经创建了一个带有

XmlDocument xmldoc = new XmlDocument();

我可以将此文件设置为可下载文件吗?在不保存它的情况下?

您会想看看如何编写一个自定义HTTP处理程序(一个实现
IHttpHandler
的类),然后简单地在web.config中注册它。有关如何设置的示例,请参见

下面是一个基本示例,说明如何实现一个返回
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; }
    }
}
这就是为什么:

xmldoc.Save(Response.OutputStream)

不要忘记设置响应mime类型和其他相关属性,以便客户端浏览器将其理解为文件下载。

您可以执行以下操作:

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);
XmlDocument doc=新的XmlDocument();
doc.LoadXml(@“myxml”);
Response.Clear();
AddHeader(“内容处置”,“附件;文件名=MyXmlDocument.xml”);
AddHeader(“Content-Length”,doc.OuterXml.Length.ToString());
Response.ContentType=“应用程序/八位字节流”;
Response.Write(doc.OuterXml);

与Noldorin发布的内容不同,您不必创建自定义HTTP处理程序

如果要下载XmlDocument类创建的XML文档,可以将其直接保存到流中,将其内容类型设置为
text/XML

大致类似于以下代码:

XmlDocument xmldoc = new XmlDocument();

/*
 * ... more code ...
 */

this.Response.ContentType = "text/xml";

xmldoc.Save(this.Response.OutputStream);

您需要响应请求,并将文档保存到响应中。当然,您需要能够以某种方式获取
XmlDocument
——如果您在一个请求中创建了它(例如,对于一个页面),那么您需要能够基于参数重新创建它,或者在会话中缓存它(所有正常的警告)

例如,在正常的
页面中
可以执行以下操作:

xmldoc.Save(Response.OutputStream);

您可以轻松地创建.ashx文件和相关的代码隐藏(新的“通用处理程序”项),然后在代码隐藏中使用以下各项实现
IHttpHandler
implement
ProcessRequest

public void ProcessRequest(HttpContext context)
{
    XmlDocument doc = ...;

    doc.Save(context.Response.OutputStream);
}

您可能还需要设置适当的内容类型(可能是“text/xml”,除非它是一种特定的xml格式,您希望对其进行不同的解释),等等。如果您希望客户端默认保存它,您应该设置内容配置。

您不必注册自定义处理程序,但我发现创建.ashx文件最简单(+代码隐藏)编写适当的XML。我更喜欢这样做,而不是使用普通页面,人们可能希望创建HTML。
public void ProcessRequest(HttpContext context)
{
    XmlDocument doc = ...;

    doc.Save(context.Response.OutputStream);
}