在用c#进行代码开发,需要将DataTable内容转换为xml字符串。从网上下载了代码运行后,发现字符串转换后,复制到xml文件,用xml校验器(xmlspy)校验有异常,用微软的xml加载也失败。
经过研究和测试后发现,是因为保存文件后,其前两个字节保存的是文件编码信息,原来直接进行读写,所以处理有问题,正确的读写处理的时候,需要跳过前两个字节,进行读写操作才可以。希望对大家以后遇到类似问题的时候有所帮助。
正确代码如下:
/// <summary>
/// DataTable转换成XML
/// </summary>
/// <param name="xmlDS">数据表</param>
/// <returns>表转换的字符串</returns>
private string ConvertDataTableToXML(DataTable xmlDS)
{
MemoryStream stream = null;
XmlTextWriter writer = null;
try
{
stream = new MemoryStream();
//从stream装载到XmlTextReader
writer = new XmlTextWriter(stream,Encoding.Unicode);
//用WriteXml方法写入文件.
xmlDS.WriteXml(writer);
int count = (int)stream.Length;
byte[] arr = new byte[count];
stream.Seek(0,SeekOrigin.Begin);
stream.Read(arr,count);
//返回Unicode编码的文本
UnicodeEncoding utf = new UnicodeEncoding();
//注意跳过前两个字节,那个是标志是unicode还是ansi的,否则在其他地方使用会异常。注意后面的粗体字2.
string szHeader = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
string szText = System.Text.Encoding.Unicode.GetString(arr,2,count-2); return String.Format("{0}\r\n{1}",szHeader,szText); ; } catch (System.Exception ex) { throw ex; } finally { if (writer != null) writer.Close(); } }