[英]Writing the contents of a scraped page to a text file to download on client's browser
[英]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.