在那里,我正在开发一个asp.net网页,首先让用户输入所需的值到指定的文本字段,然后根据用户提供的数据生成一个新的文本文件。
我想让用户在点击“获取文件”按钮时收到“Result.xml”文件。
我已经搜索了这些信息,我知道它必须有一个简单的解决方案但是现在我运气不好(我一定很累)。我尝试了以下代码,但它没有用:
DataSet ds = new DataSet();
ds.Tables.Add("TEST");
ds.writexml("test.xml");
Response.TransmitFile("test.xml");
但程序说它无法找到任何文件。我也不想“写”一个物理文件到服务器,我只想将数据集的内容发送为“test.xml”
请帮忙, 谢谢你花时间。
答案 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;
}
}
}