C# 實現DataTable、DataSet與XML互相轉換

來源:互聯網
上載者:User

標籤:

/**//// <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執行個體化XmlWt                    XmlWt = 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執行個體化XmlWt                    XmlWt = 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();   }}

 

C# 實現DataTable、DataSet與XML互相轉換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.