做了一个用xml做数据库的winform程序,现在想对xml中的数据进行统计求和xml中数据显示在datatable中为
姓名 收费合计 费用1 费用2 ... 日期
甲 200 100 100 ... 2009.12.31
甲 300 200 100 ... 2010.1.1
甲 400 300 100 ... 2010.1.26
乙 100 40 60 ... 2010.1.24
丙 ...(以下省略)我想要得到的结果是:
姓名 收费合计 费用1 费用2 ... 日期
甲 900 600 300 ... 2010.1.26
乙 100 40 60 ... 2010.1.24
丙 ...(以下省略)应该怎么统计呢?我写了点程序,结果越写遍历次数越多...晕死,求简单点的方法
姓名 收费合计 费用1 费用2 ... 日期
甲 200 100 100 ... 2009.12.31
甲 300 200 100 ... 2010.1.1
甲 400 300 100 ... 2010.1.26
乙 100 40 60 ... 2010.1.24
丙 ...(以下省略)我想要得到的结果是:
姓名 收费合计 费用1 费用2 ... 日期
甲 900 600 300 ... 2010.1.26
乙 100 40 60 ... 2010.1.24
丙 ...(以下省略)应该怎么统计呢?我写了点程序,结果越写遍历次数越多...晕死,求简单点的方法
我之前遇到这样的问题了
我用的方法比较老套是把xml导入datatable中然后重组数据集
你要的话 我给你看看
邮箱[email protected]
http://msdn.microsoft.com/zh-cn/library/bb387098.aspx
我用的方法很笨的
DataSet dsxml2 = new DataSet(); DataTable dtxml2 = new DataTable(); dsxml2.ReadXml(Server.MapPath("XMLFile2.xml"));
if (dsxml2.Tables.Count != 0)
{
dtxml2 = dsxml2.Tables[0];
}
DataSet dsxml1 = new DataSet();
DataTable dtxml1 = new DataTable();
dsxml1.ReadXml(Server.MapPath("XMLFile1.xml")); if (dsxml1.Tables.Count == 1)
{
return dtxml2;
}
else
{ if (dsxml1.Tables.Count != 0)
{
dtxml1 = dsxml1.Tables[1];
}
DataTable bingtu = new DataTable();
bingtu.Columns.Add("department");
bingtu.Columns.Add("number");
int tempxml1 = dtxml1.Rows.Count - 1;
int tempxml2 = dtxml2.Rows.Count - 1; for (int i = 0; i <= tempxml2; i++)
{
int tempnum = 0;
for (int j = 0; j <= tempxml1; j++)
{
if (dtxml2.Rows[i]["department"].ToString() == dtxml1.Rows[j]["department"].ToString())
{
tempnum += Convert.ToInt32(dtxml1.Rows[j]["number"]);
}
}
//if (tempnum != 0)
//{
DataRow drbingtu = bingtu.NewRow();
drbingtu["department"] = dtxml2.Rows[i]["department"].ToString();
drbingtu["number"] = tempnum;
bingtu.Rows.Add(drbingtu);
//}
}
dsxml1.Clone();
dsxml2.Clone();
return bingtu;
} }
如果是就 累加
然后添加到一个新的datatable中你要是需要我给你看看我的xml
和结果
比如Linq to XML,DataSet等都可以实现你的需求。
XPathNodeIterator只是一个快速定位xml提取数据的类。
如果只求数据之和的话,我认为这个还是比较方便快捷的。另外再告知楼主一个方法,那就是xml序列化。自动基于xml文件生成类,
然后提取需要数据,进行求和。