现在的位置: 首页 > 综合 > 正文

XML与DataTable互转

2012年12月06日 ⁄ 综合 ⁄ 共 4880字 ⁄ 字号 评论关闭
 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();

抱歉!评论已关闭.