如何将文本框中的XML格式的文本导出到XML文件?

时间:2018-06-19 14:05:37

标签: c# asp.net xml

我有一个显示XML信息的asp文本框。它看起来像一个XML文件。我需要能够允许用户下载从文本框内容创建的文件。我正在使用以下C#代码。

    protected void btnDownload_Click(object sender, EventArgs e)
    {
        var fileInBytes = Encoding.UTF8.GetBytes(tXML.Text);
        using (var stream = new MemoryStream(fileInBytes))
        {
            long dataLengthToRead = stream.Length;
            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();
            Response.BufferOutput = true;
            Response.ContentType = "text/xml"; /// if it is text or xml
            Response.AddHeader("Content-Disposition", "attachment; filename=" + "yourfilename.xml");
            Response.AddHeader("Content-Length", dataLengthToRead.ToString());
            stream.WriteTo(Response.OutputStream);
            Response.Flush();
            Response.Close();
        }
        Response.End();
    }

当我尝试使用Chrome下载它时,出现“失败-网络错误”。当我尝试使用IE下载它时,它会下载,但是当我查看内容时,所有的“ <”和“>”都会从中删除。我知道下载某些文件类型可能是安全问题,但是XML文件呢?有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

您似乎忘记了在将其内容写入响应之前回退内存流

using (var stream = new MemoryStream(fileInBytes))
{
    stream.Seek(0, SeekOrigin.Begin);
    long dataLengthToRead = stream.Length;
    ...

但是,正如jdweng所说,XML只是文本,可以直接写到响应中,而无需使用MemoryStream

答案 1 :(得分:0)

这是在asp.net论坛上发布的一种方法。而是使用XMLDocument对象。

XmlDocument Doc = new XmlDocument();
    XmlDeclaration dec = Doc.CreateXmlDeclaration("1.0", null, null);
    Doc.AppendChild(dec);
    XmlElement DocRoot = Doc.CreateElement("settings");
    Doc.AppendChild(DocRoot);

    XmlNode server = Doc.CreateElement("textbox1");
    DocRoot.AppendChild(server);
    server.InnerText = this.TextBox1.Text;

    XmlNode server2 = Doc.CreateElement("textbox2");
    DocRoot.AppendChild(server2);
    server2.InnerText = this.TextBox2.Text;

    Doc.Save(Application.StartupPath + "\\xmlfile.xml");