datatable 转成 xml 的问题,好难啊。。格式不会啊
标准格式是这样的
<RESULT>
<SQM>授权码</SQM>
<DATA>
<RS>
<ZDBH>字典编号</ZDBH>
<MC>名称</MC>
<BZ>备注</BZ>
</RS>
</DATA>
</RESULT>
代码输出的格式现在是这样啊
<DocumentElement>
<DATA>
<ZDBH>字典编号</ZDBH>
<MC>名称</MC>
<BZ>备注</BZ>
</DATA>
</DocumentElement>
怎么把 <DocumentElement> 去掉啊,还要加入 <RS>
源码。
public string CDataToXml(DataTable dt)XML String datatable? 数据库
{
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();
}
[解决办法]
不能,而且很简单:
DataSet ds = new DataSet();
ds.Tables.Add(dt);
string xml = ds.GetXml();
这个是你表格对象,名称你自己定,自己研究下xml的格式,就可以了。
[解决办法]
dt是你要生成xml的表格对象。
[解决办法]
我之前也被这个问题困扰过,你通过自带的序列化方式转换时,确实默认这个开头。
起始解决起来很简单,你直接把这个替换掉,或者自己创建一个根节点,然后追加后面的内容。
下面是我的帮助类,你可以参考。对了,在转换时候一定要给你的DataTable加上表名,否则容易出问题。
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
}
}
[解决办法]
加我QQ157636916,给你发操作的相关源码,但是分数要全给我,我的类库很全哦
[解决办法]
呵呵呵呵
[解决办法]
可以写正则表达式,也是很简单,将代码的<data>这个标签变为<data><rs>,将</data>这个标签变为</rs></data>,授权码也一样,将<result>这个标签变为<result><sqm>授权码</sql>,这样说是不是很明了了。
[解决办法]
其实写正则表达式,是一种非常有效的方法,而且也是一种最实用的方法,节省去了很多你没有必要的代码。
[解决办法]
你给你传入的DataSet取个名字,转化的Table取个名字,应该就可以了,那个根节点应该换成你取的名字了,你试下
[解决办法]


[解决办法]
用 XmlWriter,想要啥样就可以啥样