首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

datatable 转成 xml 的有关问题,好难啊格式不会

2013-07-04 
datatable 转成 xml 的问题,好难啊。。格式不会啊标准格式是这样的 RESULTSQM授权码/SQMDATARSZD

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)
        {
            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();
            

        }

XML String datatable? 数据库
[解决办法]
不能,而且很简单:
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,给你发操作的相关源码,但是分数要全给我,我的类库很全哦
[解决办法]
引用:
加我QQ157636916,给你发操作的相关源码,但是分数要全给我,我的类库很全哦

呵呵呵呵
[解决办法]
可以写正则表达式,也是很简单,将代码的<data>这个标签变为<data><rs>,将</data>这个标签变为</rs></data>,授权码也一样,将<result>这个标签变为<result><sqm>授权码</sql>,这样说是不是很明了了。
[解决办法]
其实写正则表达式,是一种非常有效的方法,而且也是一种最实用的方法,节省去了很多你没有必要的代码。
[解决办法]
引用:
Quote: 引用:

我之前也被这个问题困扰过,你通过自带的序列化方式转换时,确实默认这个开头。
起始解决起来很简单,你直接把这个替换掉,或者自己创建一个根节点,然后追加后面的内容。
下面是我的帮助类,你可以参考。对了,在转换时候一定要给你的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

    }
}



你这个最全了,看是看懂了,可是我在想能不能再 
   //获取ds中的数据
                    dtSource.WriteXml(XmlWt);
这个之前对 dtSource 进行处理呢?比如插入节点啊,修改啊,把里面的只分开啊之类的
你给你传入的DataSet取个名字,转化的Table取个名字,应该就可以了,那个根节点应该换成你取的名字了,你试下
[解决办法]
datatable 转成 xml 的有关问题,好难啊格式不会。。。。。。。。。。
datatable 转成 xml 的有关问题,好难啊格式不会
[解决办法]
用 XmlWriter,想要啥样就可以啥样

热点排行