Как я могу сделать загружаемый файл, созданный XmlDocument () - PullRequest
3 голосов
/ 21 мая 2009

Я создал файл с

XmlDocument xmldoc = new XmlDocument();

Можно ли сделать этот файл загружаемым? без сохранения?

Ответы [ 5 ]

3 голосов
/ 21 мая 2009

Вы можете сделать что-то вроде:

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 голос
/ 21 мая 2009

Вот как:

xmldoc.Save(Response.OutputStream)

Не забудьте установить тип MIME-ответа и другие соответствующие свойства, чтобы браузер клиента воспринимал его как загружаемый файл.

0 голосов
/ 21 мая 2009

Вам нужно будет ответить на запрос, сохранив документ в ответ. Конечно, вам нужно будет каким-то образом получить XmlDocument - если вы создали его за один запрос (например, для страницы), вам нужно будет либо создать его заново. на основе параметров, кэшировать его в сеансе (со всеми обычными предостережениями).

В качестве примера написания этого в обычном Page вы можете сделать:

xmldoc.Save(Response.OutputStream);

или

xmldoc.Save(Response.Output);

Вы можете легко создать файл .ashx и связанный с ним программный код (новый элемент «Универсальный обработчик»), а затем в программном коде, который реализует IHttpHandler внедрить ProcessRequest с помощью:

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

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

Возможно, вы также захотите установить соответствующий тип содержимого (возможно, «text / xml», если это не определенный формат XML, который вы хотите интерпретировать по-разному) и т. Д. Если вы хотите, чтобы клиент по умолчанию сохранял его, вы должен установить расположение контента.

0 голосов
/ 21 мая 2009

В отличие от того, что написал Нолдорин, вам не нужно создавать собственный обработчик HTTP.

Если вы хотите загрузить документ XML, созданный классом XmlDocument, вы всегда можете сохранить его непосредственно в поток, установив тип его содержимого text/xml.

Более или менее похож на следующий код:

XmlDocument xmldoc = new XmlDocument();

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

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

xmldoc.Save(this.Response.OutputStream);
0 голосов
/ 21 мая 2009

Вы захотите посмотреть на Custom HTTP Handler (класс, который реализует IHttpHandler) и просто зарегистрировать его в web.config. В этой статье на 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; }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...