asp.net 拆分 xml 数据表
本文关键字:数据表 xml 拆分 net asp | 更新日期: 2023-09-27 18:33:37
>我有一个从xml文件填充的数据集,我想将该主数据表拆分为多个数据表。
假设这是表格的格式:
Column1 | Column2
1234 | 4567
1234 | 1122
1234 | 2233
1000 | 3344
1000 | 5566
我需要将上述内容拆分为 2 个表,一个包含所有 1234 个值,另一个包含 1000 个值。
这就是我读取 xml 文件并正常工作的方式:
WebClient wc = new WebClient();
wc.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
string strXmlString = wc.DownloadString(strUrl); // Download the URL to a string
strXmlString = Regex.Replace(strXmlString, @"m:null.+?>{1}", @"/>"); // Find ' m:null[anything]>' and replace it with '/>'
strXmlString = Regex.Replace(strXmlString, @"['s]{1}m:.+?>{1}", @">"); // Find ' m:type[anything]>' and replace it with '>'
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(strXmlString); // Load the XML String into an XML Doc
XmlReader xReader = new XmlNodeReader(xDoc);
DataSet ds = new DataSet();
ds.ReadXml(xReader); // Upload the XML Doc Data to the DataSet
如何将ds.Tables[0]
分成 2 个表?
DataTable dt1 = ds.Tables[0].Select("Column1 ='1000'").CopyToDataTable();
DataTable dt2 = ds.Tables[0].Select("Column1 ='1234'").CopyToDataTable();
你可以
使用 Linq 和 especiall Enumerable.GroupBy
:
var column1Groups = ds.Tables[0].AsEnumerable()
.GroupBy(r => r.Field<string>("Column1"));
foreach(var group in column1Groups)
{
// if you need only the 1234 and 1000 groups:
if(group.Key == "1000" || group.Key == "1234")
{
ds.Tables.Add(group.CopyToDataTable());
}
}
与近乎纯的 Linq 相同:
var valuesNeeded = new[]{ "1000", "1234" };
var newTables = ds.Tables[0].AsEnumerable()
.GroupBy(r => r.Field<string>("Column1"))
.Where(g => valuesNeeded.Contains(g.Key))
.Select(g => g.CopyToDataTable())
.ToArray();
ds.Tables.Clear(); // if you need to clear it first
ds.Tables.AddRange( newTables );