2016-11-03 31 views
0

私はコード内に動的なXMLファイルを生成してダウンロードしようとしています。これは私が使用した関数ですAsp.netでXMLを生成

xmlUrl Url = new xmlUrl(); 
Url.Url = fileName.Text; 
List<xmlUrl> Urls = new List<xmlUrl>(); 
Urls.Add(Url); 
XmlSerializer ser = new XmlSerializer(Urls.GetType()); 
StringBuilder sb = new StringBuilder(); 
StringWriter writer = new StringWriter(sb); 
ser.Serialize(writer, Urls); 
XmlDocument doc = new XmlDocument(); 
doc.LoadXml(sb.ToString()); 


doc.WriteTo(xmlWriter); 
xmlWriter.Flush(); 
xmlWriter.Close(); 

byte[] byteArray = stream.ToArray(); 

Response.Clear(); 
Response.AppendHeader("Content-Disposition", "attachment; filename=" + lblFile.Text + ".xml"); 
Response.AppendHeader("Content-Length", byteArray.Length.ToString()); 
Response.ContentType = "text/xml"; 
Response.BinaryWrite(byteArray); 

この機能は動作しています。ダウンロードされたxmlファイルには、関連ページのhtmlコードが含まれています。

<?xml version="1.0" encoding="utf-16"?> 
<ArrayOfXmlUrl xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<xmlUrl> 
<Url> 
Url of the web content 
</Url> 
</xmlUrl> 
</ArrayOfXmlUrl> 

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head><meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1" /> 
</head> 
<body> 
source of the body 
</body> 

私はこのファイルをxml解析で解析できません。それは私にこのエラーを与えます。

An unhandled exception of type 'System.Xml.XmlException' occurred in System.Xml.dll 

Additional information: There is no Unicode byte order mark. Cannot switch to Unicode. 

これはどのように修正できますか?

+1

エラーメッセージを検索しようとすると、たくさんのヒットがあります。 [ここ](http://stackoverflow.com/q/29915467/1997232)。 – Sinatr

+0

レスポンスにファイルを書き込んだら、ページの終了が終了するようにファイルを終了する必要があります。ページを操作する必要があるために問題が発生する場合は、別のブラウザウィンドウでPDFをダウンロードする必要があります。 – mason

+0

XMLのhtml部分を削除する必要があります。そのXMLのジャンク。どうすればいい? –

答えて

0

次のコードを試すことができます。私は私が行うために必要な輸出のために以前にそれを使用して、ちょうどあなたのニーズのためにそれを適応させる:

XElement XmlExp = new XElement("StockItems", 
             from stock in DAL.GetEquipmentStockSummary() 
             select new XElement("Item", 
                  new XAttribute("ID", stock.EquipmentStockID), 
                  new XElement("Tag", stock.TagNum), 
                  new XElement("Model", stock.SubGroup), 
                  new XElement("Desc", stock.Description), 
                  new XElement("Material", stock.Finish), 
                  new XElement("Condition", stock.isUsed ? "Refurbished" : "New"), 
                  new XElement("Location", stock.LocationName) 
                  ) 
            ); 

     context.Response.Headers.Add("Content-Disposition", "attachment;filename='SOHList.xml'"); 
     context.Response.ContentType = "text/xml"; 
     context.Response.ContentEncoding = System.Text.Encoding.UTF8; 

     XmlExp.Save(context.Response.Output); 
     context.Response.End(); 

のXElementクラスはあなたの問題を解決することができます保存する機能を持っています。

@Masonによると、あなたのコードにresponse.end()の部分を追加する必要があります。正しく行われた場合、HTMLはもう存在しなくなります。

+0

私はresponse.end()を追加したときに働いた..ありがとうman –

関連する問題