簡體   English   中英

將 XML 文件寫入用戶瀏覽器並下載

[英]Writing XML file to Users Browser and download

我正在將 XML 數據寫入用戶瀏覽器以供下載。 下面是代碼

protected void WriteXmlToPageDownload(XElement XmlCustomerData) {

        try
        {
            if (XmlCustomerData != null)
            {

                XDocument x = new XDocument(new XDeclaration("1.0", "UTF-8", "yes"), new XElement(XmlCustomerData));
                StringBuilder builder = new StringBuilder();
                StringWriter writer = new StringWriter(builder);

                x.Save(writer);
                writer.Flush();
                HttpContext context = HttpContext.Current;
                context.Response.Write(builder.ToString().Replace("encoding=\"utf-16\"", "encoding=\"utf-8\""));
                context.Response.ContentType = "application/xml";
                string filename = "CustomerDetails ";
                context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + ".xml");
                context.Response.AppendHeader("Connection", "close");
                context.Response.End();

            }

        }
        catch (Exception ex)
        {
            Log("Exception in CustomerData" + ex.Message.ToString(), this);
        }
    } 

XmlCustomerData 包含由 XElement 創建的 XML(一些業務邏輯...) 下面是所需的 XML 示例

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Customers>
  <Customer>

 <deatils name="ABC">
    <id="1">
     </details>
 <deatils name="XYZ">
    <id="2">
 </details>
   ...
</Customer>
</Customers>

並且 XmlCustomerData 包含要保持完整的業務邏輯

<Customers>...</Customers>

問題是。 1.XML 被創建,也沒有被下載到用戶瀏覽器 2.我收到異常“無法評估表達式,因為代碼已優化或本機框架位於調用堆棧的頂部。”

我的要求是將 XML 文件下載到用戶的瀏覽器。 請讓我知道我在做什么錯誤或更好的方法

提前致謝。

將 xml 數據加載到XDocument后,代碼

StringBuilder builder = new StringBuilder();
StringWriter writer = new StringWriter(builder);

可以換成

x.Save(context.Response.OutputStream);

類似代碼的快速模型,下面的代碼將在用戶被要求保存或打開附件后下載 xml 內容。 該代碼包含在 Http Handler ashx 文件中。

/// <summary>
/// Summary description for Handler1
/// </summary>
public class Handler1 : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        string xml =
            @"<?xml version=""1.0""?>
            <Customers>
                <Customer>
                    <details>
                        <id/>
                    </details>
                    <details>
                        <id/>
                    </details>
                </Customer>
            </Customers>";

        XElement xel = XElement.Parse(xml);
        XDocument x = new XDocument(new XDeclaration("1.0", "UTF-8", "yes"), new XElement(xel));

        context.Response.ContentType = "application/xml";
        context.Response.AppendHeader("Content-Disposition", "attachment; filename=Test.xml");
        context.Response.AddHeader("Content-Length", xml.Length.ToString());
        x.Save(context.Response.OutputStream);
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

此代碼直接在網頁上顯示 xml。 該代碼包含在 Http Handler ashx 文件中。

/// <summary>
/// Summary description for Handler2
/// </summary>
public class Handler2 : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        string xml =
            @"<?xml version=""1.0""?>
            <Customers>
                <Customer>
                    <details>
                        <id/>
                    </details>
                    <details>
                        <id/>
                    </details>
                </Customer>
            </Customers>";

        XElement xel = XElement.Parse(xml);
        XDocument x = new XDocument(new XDeclaration("1.0", "UTF-8", "yes"), new XElement(xel));

        context.Response.ContentType = "application/xml";
        context.Response.AddHeader("Content-Length", xml.Length.ToString());
        x.Save(context.Response.OutputStream);
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM