如何:在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"
请帮忙,谢谢你的宝贵时间。
假设你能够正确地填充你的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;
}
}
}