有时候需要将DataTable数据保存到xml文件中,在不使用数据库的小程序中、在需要通过网络接口传参数时,经常会有这种需要,操作不好,会出现“缺少根元素”。现在将经过反复测试没有错误的读写两个方法写出来,大家可以修改使用。
@H_404_3@
写datatable到XML@H_404_3@
public static bool dataTable2EncXml(DataTable dt,string strFilePath)@H_404_3@ {@H_404_3@ try@H_404_3@ { @H_404_3@ string strMid = "";@H_404_3@ MemoryStream ms = new MemoryStream();@H_404_3@ StreamWriter sw = new StreamWriter(ms,System.Text.Encoding.UTF8);@H_404_3@ dt.WriteXml(sw,XmlWriteMode.WriteSchema); //必须写入架构,即没有行数据时,也写入列等架构内容,否则,没有行数据时,列数据也会丢失@H_404_3@ @H_404_3@ ms.Position = 0;//复位读取位置@H_404_3@ StreamReader sr = new StreamReader(ms,System.Text.Encoding.UTF8);@H_404_3@ strMid = sr.ReadToEnd();@H_404_3@ sr.Close();@H_404_3@ sw.Close();@H_404_3@ ms.Close();@H_404_3@ strMid = Encrypting(strMid);//加密@H_404_3@ if( WriteToFile(strFilePath,strMid) == -1) return false; //一个简单的写文本文件 的小函数@H_404_3@ else return true;@H_404_3@ }@H_404_3@ catch@H_404_3@ {@H_404_3@ return false;@H_404_3@ }@H_404_3@ }
@H_404_3@ @H_404_3@ 读XML到datatable,不会提示缺少根元素
/// <summary> /// 将Xml加密数据读入DataTable /// </summary> /// <param name="filePath">加密XML文件路径</param> public static DataTable Xml2DecDataTable(string filePath) { string strMid = ReadFromFile(filePath); //一个简单的读文本文件函数 strMid = Decrypting(strMid); //解密 //先将XML字串读到xmlDocument中 XmlDocument xd = new XmlDocument(); xd.LoadXml(strMid); //再存入内存流 MemoryStream ms = new MemoryStream(); xd.Save(ms); ms.Seek(0,SeekOrigin.Begin); //datatable就可以正确读取了,不会显示“缺少根元素” DataTable dt = new DataTable(); try { dt.ReadXml(ms); } catch (Exception ex) { } ms.Dispose(); return dt; }