110,536
社区成员
发帖
与我相关
我的任务
分享
public 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 "";
}
}
public static void Main(string[] atgs)
{
Program program = new Program();
DataTable dt = program.GetDataTable();
dt.TableName = "DATA";
Console.WriteLine(program.CDataToXml(dt));
Console.ReadLine();
}
public static string DataTableToXmlString(DataTable dtSource)
{
if (dtSource != null)
{
MemoryStream ms = null;
XmlTextWriter XmlWt = null;
try
{
ms = new MemoryStream();
//根据ms实例化XmlWt
XmlWt = new XmlTextWriter(ms, Encoding.Unicode);
//获取ds中的数据
dtSource.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 "";
}
}
我用这个方法,
将datatable转成XML字符串,
再用 xmlDoc.LoadXml方法读取字符串时
出现错误:“根级别上的数据无效。 第 1 行,位置 1。”
这个要怎么解决? using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Xml;
using System.IO;
namespace ccn.CoreLib.Xml
{
public class xToConvert
{
#region 数据转换
#region XML文件转换为DataTable
/// <summary>
/// XML 文件转换为DataTable
/// </summary>
/// <param name="strXmlFullDIr"></param>
/// <param name="strRootnode"></param>
/// <returns></returns>
public static DataTable XmlToDataTable(string strXmlFullDir, string strRootnode, string strTableName)
{
XmlDocument doc = new XmlDocument();
DataTable dtData = new DataTable(strTableName);
DataSet dsData = new DataSet();
try
{
doc.Load(strXmlFullDir);
XmlNode songNode = doc.SelectSingleNode(strRootnode);
string colName;
if (songNode != null)
{
for (int i = 0; i < songNode.ChildNodes.Count; i++)
{
colName = songNode.ChildNodes.Item(i).Name;
dtData.Columns.Add(colName);
}
}
dsData.Tables.Add(dtData);
dsData.ReadXml(strXmlFullDir);
if (dsData != null && dsData.Tables.Count > 0)
{
dtData = dsData.Tables[0];
}
}
catch (Exception ex)
{
throw ex;
}
return dtData;
}
#endregion
#region XML结构字符转换为DataTable
/// <summary>
/// Xml转换为DataTable
/// </summary>
/// <param name="xmlStr"></param>
/// <returns></returns>
public static DataTable XmlStringToDataTable(string strXml)
{
if (!string.IsNullOrEmpty(strXml))
{
StringReader StrStream = null;
XmlTextReader Xmlrdr = null;
try
{
DataSet ds = new DataSet();
//读取字符串中的信息
StrStream = new StringReader(strXml);
//获取StrStream中的数据
Xmlrdr = new XmlTextReader(StrStream);
//ds获取Xmlrdr中的数据
ds.ReadXmlSchema(Xmlrdr);
if (ds != null && ds.Tables.Count > 0)
{
return ds.Tables[0];
}
else
{
return null;
}
}
catch (Exception e)
{
throw e;
}
finally
{
//释放资源
if (Xmlrdr != null)
{
Xmlrdr.Close();
StrStream.Close();
StrStream.Dispose();
}
}
}
else
{
return null;
}
}
#endregion
#region DataTable转换成XML结构的文本
/// <summary>
/// DataTable转换成XML结构的文本
/// </summary>
/// <param name="dtSource"></param>
/// <returns></returns>
public static string DataTableToXmlString(DataTable dtSource)
{
if (dtSource != null)
{
MemoryStream ms = null;
XmlTextWriter XmlWt = null;
try
{
ms = new MemoryStream();
//根据ms实例化XmlWt
XmlWt = new XmlTextWriter(ms, Encoding.Unicode);
//获取ds中的数据
dtSource.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 "";
}
}
#endregion
#region DataTable转换成XML文件
/// <summary>
/// DataTable转换成XML结构的文本
/// </summary>
/// <param name="strXmlFullDir"></param>
/// <param name="dtSource"></param>
public static bool DataTableToXmlFile(string strXmlFullDir, DataTable dtSource)
{
try
{
string strXmlString = DataTableToXmlString(dtSource);
strXmlString = FormatXml(strXmlString);
if (!string.IsNullOrEmpty(strXmlString))
{
xOperate.SaveXml(strXmlString, strXmlFullDir);
}
if (File.Exists(strXmlFullDir))
{
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// XML结构文本格式化
/// </summary>
/// <param name="sUnformattedXml">字符串</param>
/// <returns></returns>
public static string FormatXml(string sUnformattedXml)
{
XmlDocument xd = new XmlDocument();
xd.LoadXml(sUnformattedXml);
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
XmlTextWriter xtw = null;
try
{
xtw = new XmlTextWriter(sw);
xtw.Formatting = Formatting.Indented;
xtw.Indentation = 1;
xtw.IndentChar = '\t';
xd.WriteTo(xtw);
}
finally
{
if (xtw != null)
xtw.Close();
}
return sb.ToString();
}
#endregion
#endregion
}
}