C# 实现DataTable、DataSet与XML互相转换
生活随笔
收集整理的這篇文章主要介紹了
C# 实现DataTable、DataSet与XML互相转换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/** <summary>/// 把DataSet、DataTable、DataView格式轉換成XML字符串、XML文件/// </summary>public class DataToXml{/** <summary>/// 將DataTable對象轉換成XML字符串/// </summary>/// <param name="dt">DataTable對象</param>/// <returns>XML字符串</returns>public static string CDataToXml(DataTable dt){if (dt != null){MemoryStream ms = null;XmlTextWriter XmlWt = null;try{ms = new MemoryStream();//根據ms實例化XmlWtXmlWt = new XmlTextWriter(ms, Encoding.Unicode);//獲取ds中的數據dt.WriteXml(XmlWt);int count = (int)ms.Length;byte[] temp = new byte[count];ms.Seek(0, SeekOrigin.Begin);ms.Read(temp, 0, count);//返回Unicode編碼的文本UnicodeEncoding ucode = new UnicodeEncoding();string returnValue = ucode.GetString(temp).Trim();return returnValue;}catch (System.Exception ex){throw ex;}finally{//釋放資源if (XmlWt != null){XmlWt.Close();ms.Close();ms.Dispose();}}}else{return "";}}以上轉換在一些xml版本中存在問題,會出現SoapToolkit調用的時候返回值錯誤,那么這時候可以用以下這個方法做轉換(建議大家都用以下這個方法.......因為本人曾經深受上面那個方法其害......T_T)。public string DataTableToXml(DataTable dt){StringBuilder strXml = new StringBuilder();strXml.AppendLine("<XmlTable>");for (int i = 0; i < dt.Rows.Count; i++){strXml.AppendLine("<rows>");for (int j = 0; j < dt.Columns.Count; j++){strXml.AppendLine("<" + dt.Columns[j].ColumnName + ">" + dt.Rows[i][j] + "</" + dt.Columns[j].ColumnName + ">");}strXml.AppendLine("</rows>");}strXml.AppendLine("</XmlTable>");return strXml.ToString();}/** <summary>/// 將DataSet對象中指定的Table轉換成XML字符串/// </summary>/// <param name="ds">DataSet對象</param>/// <param name="tableIndex">DataSet對象中的Table索引</param>/// <returns>XML字符串</returns>public static string CDataToXml(DataSet ds, int tableIndex){if (tableIndex != -1){return CDataToXml(ds.Tables[tableIndex]);}else{return CDataToXml(ds.Tables[0]);}}/** <summary>/// 將DataSet對象轉換成XML字符串/// </summary>/// <param name="ds">DataSet對象</param>/// <returns>XML字符串</returns>public static string CDataToXml(DataSet ds){return CDataToXml(ds, -1);}/** <summary>/// 將DataView對象轉換成XML字符串/// </summary>/// <param name="dv">DataView對象</param>/// <returns>XML字符串</returns>public static string CDataToXml(DataView dv){return CDataToXml(dv.Table);}/** <summary>/// 將DataSet對象數據保存為XML文件/// </summary>/// <param name="dt">DataSet</param>/// <param name="xmlFilePath">XML文件路徑</param>/// <returns>bool值</returns>public static bool CDataToXmlFile(DataTable dt, string xmlFilePath){if ((dt != null) && (!string.IsNullOrEmpty(xmlFilePath))){string path = HttpContext.Current.Server.MapPath(xmlFilePath);MemoryStream ms = null;XmlTextWriter XmlWt = null;try{ms = new MemoryStream();//根據ms實例化XmlWtXmlWt = new XmlTextWriter(ms, Encoding.Unicode);//獲取ds中的數據dt.WriteXml(XmlWt);int count = (int)ms.Length;byte[] temp = new byte[count];ms.Seek(0, SeekOrigin.Begin);ms.Read(temp, 0, count);//返回Unicode編碼的文本UnicodeEncoding ucode = new UnicodeEncoding();//寫文件StreamWriter sw = new StreamWriter(path);sw.WriteLine("<?xml version="1.0" encoding="utf-8"?>");sw.WriteLine(ucode.GetString(temp).Trim());sw.Close();return true;}catch (System.Exception ex){throw ex;}finally{//釋放資源if (XmlWt != null){XmlWt.Close();ms.Close();ms.Dispose();}}}else{return false;}}/** <summary>/// 將DataSet對象中指定的Table轉換成XML文件/// </summary>/// <param name="ds">DataSet對象</param>/// <param name="tableIndex">DataSet對象中的Table索引</param>/// <param name="xmlFilePath">xml文件路徑</param>/// <returns>bool]值</returns>public static bool CDataToXmlFile(DataSet ds, int tableIndex, string xmlFilePath){if (tableIndex != -1){return CDataToXmlFile(ds.Tables[tableIndex], xmlFilePath);}else{return CDataToXmlFile(ds.Tables[0], xmlFilePath);}}/** <summary>/// 將DataSet對象轉換成XML文件/// </summary>/// <param name="ds">DataSet對象</param>/// <param name="xmlFilePath">xml文件路徑</param>/// <returns>bool]值</returns>public static bool CDataToXmlFile(DataSet ds, string xmlFilePath){return CDataToXmlFile(ds, -1, xmlFilePath);}/** <summary>/// 將DataView對象轉換成XML文件/// </summary>/// <param name="dv">DataView對象</param>/// <param name="xmlFilePath">xml文件路徑</param>/// <returns>bool]值</returns>public static bool CDataToXmlFile(DataView dv, string xmlFilePath){return CDataToXmlFile(dv.Table, xmlFilePath);}}/** <summary>/// XML形式的字符串、XML文江轉換成DataSet、DataTable格式/// </summary>public class XmlToData{/** <summary>/// 將Xml內容字符串轉換成DataSet對象/// </summary>/// <param name="xmlStr">Xml內容字符串</param>/// <returns>DataSet對象</returns>public static DataSet CXmlToDataSet(string xmlStr){if (!string.IsNullOrEmpty(xmlStr)){StringReader StrStream = null;XmlTextReader Xmlrdr = null;try{DataSet ds = new DataSet();//讀取字符串中的信息StrStream = new StringReader(xmlStr);//獲取StrStream中的數據Xmlrdr = new XmlTextReader(StrStream);//ds獲取Xmlrdr中的數據 ds.ReadXml(Xmlrdr);return ds;}catch (Exception e){throw e;}finally{//釋放資源if (Xmlrdr != null){Xmlrdr.Close();StrStream.Close();StrStream.Dispose();}}}else{return null;}}/** <summary>/// 將Xml字符串轉換成DataTable對象/// </summary>/// <param name="xmlStr">Xml字符串</param>/// <param name="tableIndex">Table表索引</param>/// <returns>DataTable對象</returns>public static DataTable CXmlToDatatTable(string xmlStr, int tableIndex){return CXmlToDataSet(xmlStr).Tables[tableIndex];}/** <summary>/// 將Xml字符串轉換成DataTable對象/// </summary>/// <param name="xmlStr">Xml字符串</param>/// <returns>DataTable對象</returns>public static DataTable CXmlToDatatTable(string xmlStr){return CXmlToDataSet(xmlStr).Tables[0];}/** <summary>/// 讀取Xml文件信息,并轉換成DataSet對象/// </summary>/// <remarks>/// DataSet ds = new DataSet();/// ds = CXmlFileToDataSet("/XML/upload.xml");/// </remarks>/// <param name="xmlFilePath">Xml文件地址</param>/// <returns>DataSet對象</returns>public static DataSet CXmlFileToDataSet(string xmlFilePath){if (!string.IsNullOrEmpty(xmlFilePath)){string path = HttpContext.Current.Server.MapPath(xmlFilePath);StringReader StrStream = null;XmlTextReader Xmlrdr = null;try{XmlDocument xmldoc = new XmlDocument();//根據地址加載Xml文件xmldoc.Load(path);DataSet ds = new DataSet();//讀取文件中的字符流StrStream = new StringReader(xmldoc.InnerXml);//獲取StrStream中的數據Xmlrdr = new XmlTextReader(StrStream);//ds獲取Xmlrdr中的數據ds.ReadXml(Xmlrdr);return ds;}catch (Exception e){throw e;}finally{//釋放資源if (Xmlrdr != null){Xmlrdr.Close();StrStream.Close();StrStream.Dispose();}}}else{return null;}}/** <summary>/// 讀取Xml文件信息,并轉換成DataTable對象/// </summary>/// <param name="xmlFilePath">xml文江路徑</param>/// <param name="tableIndex">Table索引</param>/// <returns>DataTable對象</returns>public static DataTable CXmlToDataTable(string xmlFilePath, int tableIndex){return CXmlFileToDataSet(xmlFilePath).Tables[tableIndex];}/** <summary>/// 讀取Xml文件信息,并轉換成DataTable對象/// </summary>/// <param name="xmlFilePath">xml文江路徑</param>/// <returns>DataTable對象</returns>public static DataTable CXmlToDataTable(string xmlFilePath){return CXmlFileToDataSet(xmlFilePath).Tables[0];}}
?
using System; using System.Data; using System.IO; using System.Xml; using System.Text; // 相應C#代碼: private string ConvertDataTableToXML(DataTable xmlDS) {MemoryStream stream = null;XmlTextWriter writer = null;try{stream = new MemoryStream();writer = new XmlTextWriter(stream, Encoding.Default);xmlDS.WriteXml(writer);int count = (int)stream.Length;byte[] arr = new byte[count];stream.Seek(0, SeekOrigin.Begin);stream.Read(arr, 0, count);UTF8Encoding utf = new UTF8Encoding();return utf.GetString(arr).Trim();}catch{return String.Empty;}finally{if (writer != null) writer.Close();} }private DataSet ConvertXMLToDataSet(string xmlData) {StringReader stream = null;XmlTextReader reader = null;try{DataSet xmlDS = new DataSet();stream = new StringReader(xmlData);reader = new XmlTextReader(stream);xmlDS.ReadXml(reader);return xmlDS;}catch (Exception ex){string strTest = ex.Message;return null;}finally{if (reader != null)reader.Close();} }?
轉載于:https://www.cnblogs.com/Kconnie/p/5162012.html
總結
以上是生活随笔為你收集整理的C# 实现DataTable、DataSet与XML互相转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java面试——线程池
- 下一篇: 跨站脚本功攻击,xss,一个简单的例子让