热门:网页模板.net视频教程JQueryMVCjsonExtJs源码示例三级联动JQuery菜单
您现在的位置:.Net中文社区>> XML编程>>正文内容

XML与DataTable互转类

发布时间:2009年01月07日点击数: jiang_jiajia
class test
    {  
       public static DataTable GetDataTable(string xmlStr)
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xmlStr);

            XmlNodeList xlist = doc.SelectNodes("//DataTable/Rows");
            DataTable Dt = new DataTable();
            DataRow Dr;

             for (int i = 0; i < xlist.Count; i++)
             {
                Dr = Dt.NewRow();
                XmlElement xe = (XmlElement)xlist.Item(i);
                for (int j = 0; j < xe.Attributes.Count; j++)
                {
                    if (!Dt.Columns.Contains("@" + xe.Attributes[j].Name))
                        Dt.Columns.Add("@" + xe.Attributes[j].Name);
                    Dr["@" + xe.Attributes[j].Name] = xe.Attributes[j].Value;
                }

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

                Dt.Rows.Add(Dr);
            }

            return Dt;
        }



        public static string GetXml(DataTable dt)
        {
            string strXml = @"<?xml version='1.0' encoding='UTF-8' ?><DataTable />";
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(strXml);
            XmlNode root = doc.SelectSingleNode("//DataTable");
            // 创建子节点
            for (int j = 0; j < dt.Rows.Count; j++)
            {
                XmlElement xe = doc.CreateElement("Rows");
                XmlElement xeChild = null;
                if (!Object.Equals(dt, null))
                {
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        if (dt.Columns[i].ColumnName.StartsWith("@"))
                        {
                            string AttributeName = dt.Columns[i].ColumnName.Replace("@", "");
                            // 为该子节点设置属性
                            xe.SetAttribute(AttributeName, dt.Rows[j][i].ToString());
                        }

                        else
                        {
                             xeChild = doc.CreateElement(dt.Columns[i].ColumnName);

                            try
                            {
                                xeChild.InnerXml = dt.Rows[j][i].ToString();
                            }

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

                            xe.AppendChild(xeChild);
                        }

                    }

                }

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

            return doc.InnerXml.ToString();
        }

    }

//调用
            DataTable dt = new DataTable("DataTable");
            DataColumn dc1 = new DataColumn("merCode", Type.GetType("System.String"));
            DataColumn dc2 = new DataColumn("crCode", Type.GetType("System.String"));
            DataColumn dc3 = new DataColumn("startDate", Type.GetType("System.String"));
            DataColumn dc4 = new DataColumn("endDate", Type.GetType("System.String"));
            DataColumn dc5 = new DataColumn("hkID", Type.GetType("System.String"));
            DataColumn dc6 = new DataColumn("printNo", Type.GetType("System.String"));
            DataColumn dc7 = new DataColumn("LogInfo", Type.GetType("System.String"));
            dt.Columns.Add(dc1);
            dt.Columns.Add(dc2);
            dt.Columns.Add(dc3);
            dt.Columns.Add(dc4);
            dt.Columns.Add(dc5);
            dt.Columns.Add(dc6);
            dt.Columns.Add(dc7);

            DataRow dr = dt.NewRow();
            dr["merCode"] = "1";
            dr["crCode"] = "1";
            dr["endDate"] = "1";
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["merCode"] = "2";
            dr["crCode"] = "2";
               dr["endDate"] = "2";
            dt.Rows.Add(dr);

            Console.WriteLine(test.GetXml(dt));

            Console.WriteLine("");

            DataTable dts = test.GetDataTable(test.GetXml(dt));
            for (int i = 0; i < dts.Rows.Count; i++)
            {
                string str = string.Empty;
                for (int j = 0; j < dts.Columns.Count; j++)
                {
                    str += dts.Rows[i][j].ToString();
                }

                Console.WriteLine(str);
            }

            
            Console.ReadLine();

本站热点业务

更多模板/案例展示

热门推荐

关于我们 | 联系我们 | 团队日志 | 网站地图 | 网站合作