【问题标题】:How can I export XML formatted text in a text box to an XML file?如何将文本框中的 XML 格式文本导出到 XML 文件?
【发布时间】:2018-06-19 14:05:36
【问题描述】:

我有一个显示 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 文件?有没有更好的方法来做到这一点?

【问题讨论】:

  • Xml 只是文本,因此您可以使用 StreamWriter() 保存。
  • 我实际上并不想在 Web 服务器上创建文件。我希望用户能够从 .aspx 页面下载文件。 xml 包含敏感数据,我不能将它们留在文件夹中。
  • 您是在设计服务器代码还是网页?网页在用户 PC 上运行,无需下载。只是需要保存。
  • 这是服务器代码。我希望 xml 被下载而不是保存。

标签: c# asp.net xml


【解决方案1】:

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

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

但是,正如 jdweng 所说,XML 只是文本,可以直接写入响应而不需要 MemoryStream

【讨论】:

    【解决方案2】:

    这是在 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");
    

    【讨论】:

    • 我实际上并不想在 Web 服务器上创建文件。我希望用户能够从 .aspx 页面下载文件。 xml 包含敏感数据,我不能将它们留在文件夹中。
    • 我明白了。这是一种将 Doc 写入响应的方法(在底部):stackoverflow.com/questions/543319/how-to-return-xml-in-asp-net 祝你好运!
    猜你喜欢
    • 2012-02-18
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多