如何:动态创建XML文件内容并在asp.net c中作为文本文件发送#

时间:2011-04-27 15:34:42

标签: c# asp.net xml

在那里,我正在开发一个asp.net网页,首先让用户输入所需的值到指定的文本字段,然后根据用户提供的数据生成一个新的文本文件。

我想让用户在点击“获取文件”按钮时收到“Result.xml”文件。

我已经搜索了这些信息,我知道它必须有一个简单的解决方案但是现在我运气不好(我一定很累)。我尝试了以下代码,但它没有用:

 DataSet ds = new DataSet();
 ds.Tables.Add("TEST");
 ds.writexml("test.xml");
 Response.TransmitFile("test.xml");

但程序说它无法找到任何文件。我也不想“写”一个物理文件到服务器,我只想将数据集的内容发送为“test.xml”

请帮忙, 谢谢你花时间。

4 个答案:

答案 0 :(得分:4)

假设您能够正确填充DataSet,您应该能够在示例中使用DataSet.WriteXML来写入MemoryStream,然后将文件转储到HTTP响应,而不会访问服务器的磁盘。

我对C#有点生疏,这个例子来自VB,所以请用一点点语法:

    System.IO.MemoryStream objStream = new System.IO.MemoryStream();
    System.Data.DataSet ds = new System.Data.DataSet();
    ds.Tables.Add("TEST");
    ds.WriteXml(objStream);

    Response.Clear();
    Response.Buffer = true;
    Response.ContentType = "text/xml";
    Response.AddHeader("Content-Disposition", "attachment; filename=File.xml");
    Response.BinaryWrite(objStream.ToArray());
    Response.End();

答案 1 :(得分:2)

您可以使用以下代码将XML文件写入客户端计算机。在这里,我们 使用Response.OutputStream

将内容直接写入XmlTextWriter
try
{           
    Response.Clear();
    Response.ContentType = "text/xml";
    Response.AppendHeader("Content-Disposition","attachment;filename=FileName.xml");
    XmlTextWriter xWriter = new XmlTextWriter(Response.OutputStream, System.Text.Encoding.UTF8);
    xWriter.Formatting = Formatting.Indented;
    xWriter.WriteStartDocument();
    //Create Parent element
    xWriter.WriteStartElement("Parent");
    //Create Child elements
    xWriter.WriteStartElement("Element");
    xWriter.WriteElementString("ID", "1001");
    xWriter.WriteElementString("Name", "John");
    xWriter.WriteElementString("Age", "22");
    xWriter.WriteEndElement();

    //End writing top element and XML document
    xWriter.WriteEndElement();
    xWriter.WriteEndDocument();
    xWriter.Close();
    Response.End();
}

答案 2 :(得分:1)

每当您使用Asp.Net中的文件时,都应该使用Server.MapPath。如果您使用相对路径,您的代码可能会尝试写入IIS文件夹,并且可能(希望)不允许这样做。因此,不应使用“test.xml”,而应使用

Server.MapPath("~/text.xml")

代字号扩展到您的网络应用程序文件夹。这说将文件存储到光盘是个坏主意。 Response对象有一个OutputStream,可用于将数据发送到浏览器。您应该将数据集直接写入该流。因此,不必将文件写入光盘,您不必关心路径,并且您的代码也可以处理多个并发请求。

答案 3 :(得分:0)

您可以使用以下代码获得指向HTTPHandler的链接:

public class YourHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        Response.Clear();
        Response.ContentType = "text/xml";
        Response.AppendHeader("Content-Disposition", String.Format("attachment;filename={0}", XML_FileName));
        Response.TransmitFile(Server.MapPath("MyFile.xml"));
        Response.End();
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}