分享

xml与datatable互转类

 lan1117 2012-06-17
  1. public static DataTable GetDataTable(string xmlStr)       
  2.         {       
  3.             XmlDocument doc = new XmlDocument();       
  4.             doc.LoadXml(xmlStr);       
  5.        
  6.             XmlNodeList xlist = doc.SelectNodes("//DataTable/Rows");       
  7.             DataTable Dt = new DataTable();       
  8.             DataRow Dr;       
  9.        
  10.              for (int i = 0; i < xlist.Count; i++)       
  11.              {       
  12.                 Dr = Dt.NewRow();       
  13.                 XmlElement xe = (XmlElement)xlist.Item(i);       
  14.                 for (int j = 0; j < xe.Attributes.Count; j++)       
  15.                 {       
  16.                     if (!Dt.Columns.Contains("@" + xe.Attributes[j].Name))       
  17.                         Dt.Columns.Add("@" + xe.Attributes[j].Name);       
  18.                     Dr["@" + xe.Attributes[j].Name] = xe.Attributes[j].Value;       
  19.                 }       
  20.                 for (int j = 0; j < xe.ChildNodes.Count; j++)       
  21.                 {       
  22.                     if (!Dt.Columns.Contains(xe.ChildNodes.Item(j).Name))       
  23.                         Dt.Columns.Add(xe.ChildNodes.Item(j).Name);       
  24.                     Dr[xe.ChildNodes.Item(j).Name] = xe.ChildNodes.Item(j).InnerText;       
  25.                 }       
  26.                 Dt.Rows.Add(Dr);       
  27.             }       
  28.             return Dt;       
  29.         }       
  30.        
  31.        
  32.         public static string GetXml(DataTable dt)       
  33.         {       
  34.             string strXml = @"<?xml version='1.0' encoding='UTF-8' ?><DataTable />";       
  35.             XmlDocument doc = new XmlDocument();       
  36.             doc.LoadXml(strXml);       
  37.             XmlNode root = doc.SelectSingleNode("//DataTable");       
  38.             // 创建子节点       
  39.             for (int j = 0; j < dt.Rows.Count; j++)       
  40.             {       
  41.                 XmlElement xe = doc.CreateElement("Rows");       
  42.                 XmlElement xeChild = null;       
  43.                 if (!Object.Equals(dt, null))       
  44.                 {       
  45.                     for (int i = 0; i < dt.Columns.Count; i++)       
  46.                     {       
  47.                         if (dt.Columns[i].ColumnName.StartsWith("@"))       
  48.                         {       
  49.                             string AttributeName = dt.Columns[i].ColumnName.Replace("@""");       
  50.                             // 为该子节点设置属性       
  51.                             xe.SetAttribute(AttributeName, dt.Rows[j][i].ToString());       
  52.                         }       
  53.                         else       
  54.                         {       
  55.                              xeChild = doc.CreateElement(dt.Columns[i].ColumnName);       
  56.        
  57.                             try       
  58.                             {       
  59.                                 xeChild.InnerXml = dt.Rows[j][i].ToString();       
  60.                             }       
  61.                             catch       
  62.                             {       
  63.                                 xeChild.InnerText = dt.Rows[j][i].ToString();       
  64.                             }       
  65.                             xe.AppendChild(xeChild);       
  66.                         }       
  67.                     }       
  68.                 }       
  69.                 // 保存子节点设置       
  70.                 root.AppendChild(xe);       
  71.             }       
  72.             return doc.InnerXml.ToString();       
  73.         }      

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多