XML与DataTable互转

  class  test
  2      {
  3
  4        public static DataTable GetDataTable(string xmlStr)
  5        {
  6            XmlDocument doc = new XmlDocument();
  7            doc.LoadXml(xmlStr);
  8
  9            XmlNodeList xlist = doc.SelectNodes("//DataTable/Rows");
 10            DataTable Dt = new DataTable();
 11            DataRow Dr;
 12
 13            for (int i = 0; i < xlist.Count; i++)
 14            {
 15                Dr = Dt.NewRow();
 16                XmlElement xe = (XmlElement)xlist.Item(i);
 17                for (int j = 0; j < xe.Attributes.Count; j++)
 18                {
 19                    if (!Dt.Columns.Contains("@" + xe.Attributes[j].Name))
 20                        Dt.Columns.Add("@" + xe.Attributes[j].Name);
 21                    Dr["@" + xe.Attributes[j].Name] = xe.Attributes[j].Value;
 22                }

 23                for (int j = 0; j < xe.ChildNodes.Count; j++)
 24                {
 25                    if (!Dt.Columns.Contains(xe.ChildNodes.Item(j).Name))
 26                        Dt.Columns.Add(xe.ChildNodes.Item(j).Name);
 27                    Dr[xe.ChildNodes.Item(j).Name] = xe.ChildNodes.Item(j).InnerText;
 28                }

 29                Dt.Rows.Add(Dr);
 30            }

 31            return Dt;
 32        }

 33
 34
 35        public static string GetXml(DataTable dt)
 36        {
 37            string strXml = @"<?xml version='1.0' encoding='UTF-8' ?><DataTable />";
 38            XmlDocument doc = new XmlDocument();
 39            doc.LoadXml(strXml);
 40            XmlNode root = doc.SelectSingleNode("//DataTable");
 41            // 创建子节点
 42            for (int j = 0; j < dt.Rows.Count; j++)
 43            {
 44                XmlElement xe = doc.CreateElement("Rows");
 45                XmlElement xeChild = null;
 46                if (!Object.Equals(dt, null))
 47                {
 48                    for (int i = 0; i < dt.Columns.Count; i++)
 49                    {
 50                        if (dt.Columns[i].ColumnName.StartsWith("@"))
 51                        {
 52                            string AttributeName = dt.Columns[i].ColumnName.Replace("@""");
 53                            // 为该子节点设置属性
 54                            xe.SetAttribute(AttributeName, dt.Rows[j][i].ToString());
 55                        }

 56                        else
 57                        {
 58                            xeChild = doc.CreateElement(dt.Columns[i].ColumnName);
 59
 60                            try
 61                            {
 62                                xeChild.InnerXml = dt.Rows[j][i].ToString();
 63                            }

 64                            catch
 65                            {
 66                                xeChild.InnerText = dt.Rows[j][i].ToString();
 67                            }

 68                            xe.AppendChild(xeChild);
 69                        }

 70                    }

 71                }

 72                // 保存子节点设置
 73                root.AppendChild(xe);
 74            }

 75            return doc.InnerXml.ToString();
 76        }

 77    }

 78 // 调用
 79             DataTable dt  =   new  DataTable( " DataTable " );
 80             DataColumn dc1  =   new  DataColumn( " merCode " , Type.GetType( " System.String " ));
 81             DataColumn dc2  =   new  DataColumn( " crCode " , Type.GetType( " System.String " ));
 82             DataColumn dc3  =   new  DataColumn( " startDate " , Type.GetType( " System.String " ));
 83             DataColumn dc4  =   new  DataColumn( " endDate " , Type.GetType( " System.String " ));
 84             DataColumn dc5  =   new  DataColumn( " hkID " , Type.GetType( " System.String " ));
 85             DataColumn dc6  =   new  DataColumn( " printNo " , Type.GetType( " System.String " ));
 86             DataColumn dc7  =   new  DataColumn( " LogInfo " , Type.GetType( " System.String " ));
 87             dt.Columns.Add(dc1);
 88             dt.Columns.Add(dc2);
 89             dt.Columns.Add(dc3);
 90             dt.Columns.Add(dc4);
 91             dt.Columns.Add(dc5);
 92             dt.Columns.Add(dc6);
 93             dt.Columns.Add(dc7);
 94
 95             DataRow dr  =  dt.NewRow();
 96             dr[ " merCode " =   " 1 " ;
 97             dr[ " crCode " =   " 1 " ;
 98             dr[ " endDate " =   " 1 " ;
 99             dt.Rows.Add(dr);
100
101             dr  =  dt.NewRow();
102             dr[ " merCode " =   " 2 " ;
103             dr[ " crCode " =   " 2 " ;
104             dr[ " endDate " =   " 2 " ;
105             dt.Rows.Add(dr);
106
107             Console.WriteLine(test.GetXml(dt));
108
109             Console.WriteLine( "" );
110
111
112             DataTable dts  =  test.GetDataTable(test.GetXml(dt));
113              for  ( int  i  =   0 ; i  <  dts.Rows.Count; i ++ )
114              {
115                string str = string.Empty;
116                for (int j = 0; j < dts.Columns.Count; j++)
117                {
118                    str += dts.Rows[i][j].ToString();
119                }

120                Console.WriteLine(str);
121            }

122             
123             Console.ReadLine();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值