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

本文关键字:文件 文本 XML asp net 创建 动态 如何 | 更新日期: 2023-09-27 17:53:32

嗨,我在一个asp.net网页上工作,首先让用户输入所需的值来指示文本字段,然后根据用户给出的数据生成一个新的文本文件。

我想让用户收到一个"Result.xml"文件,当他们点击"获取文件"按钮。

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

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

但是程序说它找不到任何文件。另外,我不想"写"一个物理文件到服务器,我只是想发送数据集的内容为"test.xml"

请帮忙,谢谢你的宝贵时间。

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

假设你能够正确地填充你的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();

可以使用下面的代码将XML文件写入客户机。在这里,我们使用XmlTextWriter:

将内容直接写入Response.OutputStream
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();
}

当你在Asp. js中处理文件时。Net中应该使用Server.MapPath。如果您使用相对路径,您的代码可能会尝试写入IIS文件夹,可能(希望)不允许这样做。所以你应该使用

而不是"test。xml"
Server.MapPath("~/text.xml")

波浪展开到您的web应用程序文件夹。也就是说,将文件存储到磁盘上不是一个好主意。Response对象有一个OutputStream,可用于向浏览器发送数据。您应该将数据集直接写入该流。所以没有文件必须写入磁盘,你不必关心路径,你的代码也可以处理多个并发请求。

您可以使用以下代码将链接链接到IHTTPHandler:

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;
        }
    }
}