XML与DataTable互转类

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值