【问题标题】:How To: Dynamically Creating the XML file content and sending as a text file in asp.net c#如何:动态创建 XML 文件内容并在 asp.net c# 中作为文本文件发送
【发布时间】:2011-04-27 15:34:41
【问题描述】:

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

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

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

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

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

请帮忙, 感谢您花时间。

【问题讨论】:

    标签: c# asp.net xml


    【解决方案1】:

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

    【讨论】:

    • 这个解决方案看起来是我的问题的最佳选择。明天测试时我会告诉你它是否有效,谢谢你的回答
    • 将此与stackoverflow.com/questions/10407295/… 中的答案结合起来提供了一种简化——在 Response.Outstream 中使用手头的 MemoryStream;即设置标题后, ds.WriteXml(Response.Outstream);
    【解决方案2】:

    您可以使用以下代码将 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();
    }
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        您可以使用以下代码获得指向 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;
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2011-12-20
          • 1970-01-01
          • 2018-10-20
          • 1970-01-01
          • 2021-04-09
          • 2012-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多