xml

using System; 
using System.Data; 
using System.IO; 
using System.Xml; 
using System.Text; 

namespace HyeyClass.Common
{
	/// <summary>
	/// Xml 的摘要说明。
	/// </summary>
	public class Xml
	{
		public Xml()
		{
			//
			// TODO: 在此处添加构造函数逻辑
			//
		}
		

		
		/// <summary>
		/// Converts the data table to XML.
		/// </summary>
		/// <param name="xmlDS">The XML DS.</param>
		/// <returns></returns>
		public static 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(); 
			} 
		}


		/// <summary>
		/// Converts the XML to data set.
		/// </summary>
		/// <param name="xmlData">The XML data.</param>
		/// <returns></returns>
		public static 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(); 
			} 
		}
	}

	/// <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 "";
			}
		}

		/// <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];
		}
	}
}

原文地址:https://www.cnblogs.com/Leo_wl/p/1727068.html