以下代码需要生成XML文件。
string path = @"c:\load\myFile.xml";
SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpFloors"].ConnectionString);
SqlCommand cmd;
cmd = new SqlCommand("select coords.xyid as '@id', xmin, xmax, ymin, ymax,(select brief, long, img from floordesc where coords.xyid = floordesc.xyid for xml path(''),Type) as 'desc' from coords where xyid <> '' for xml path('coord'), Elements XSINIL,root('coords')", connection);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet("coords");
da.Fill(ds, "coord");
Response.Write(ds.GetXml());
File.WriteAllText(path, ds.GetXml());
XML应该看起来完全像:
<?xml version="1.0" encoding="iso-8859-1"?>
<coords>
<coord id="6090">
<title>Office 6090</title>
<xmin>10</xmin>
<xmax>60</xmax>
<ymin>40</ymin>
<ymax>90</ymax>
<desc>
<brief>one</brief>
<long>one more</long>
<img>dude.jpg</img>
</desc>
</coord>
<coord id="11090">....
Response.Write代码正确地将其写入页面。但是,当我尝试写入文件时,它会变为htmlencoding。
<coords xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><
我没有看到只写出在response.write期间呈现的相同文本的方法。任何线索都会受到赞赏。
答案 0 :(得分:1)
改变你的方法。对不起,我没有注意到你使用的是FOR XML
条款。
在这种情况下,您必须使用ExecuteXmlReader
,并保存结果输出。这是一个例子:
var xmlReader = cmd.ExecuteXmlReader();
var xmlDoc = new XmlDocument();
xmlDoc.Load(xmlReader);
xmlReader.Close();
xmlDoc.Save(path);
希望这有帮助!
答案 1 :(得分:0)
您是否尝试过ds.WriteXml(string path)
?
参考:http://msdn.microsoft.com/en-us/library/hb27k0tf.aspx
如果您有选项,可以绕过从.net写入文件并执行sql端
bcp "SELECT * FROM pubs..authors FOR XML RAW" queryout c:\myfile.xml -Sserver -Uusername -Ppassword -c -r -t
答案 2 :(得分:0)
尝试在输出中使用HtmlDecode方法。 http://msdn.microsoft.com/en-us/library/7c5fyk1k.aspx