做了一个用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.   

    采用XPathNodeIterator类,直接定位然后抽取数据。
      

  2.   

    你的日期统计是取最后的日期吗
    我之前遇到这样的问题了
    我用的方法比较老套是把xml导入datatable中然后重组数据集
    你要的话 我给你看看
      

  3.   

    我要~~~~~~~~~~
    邮箱[email protected]
      

  4.   

    我小白...XPathNodeIterator这是什么东东?...
      

  5.   

    LINQ to XML
    http://msdn.microsoft.com/zh-cn/library/bb387098.aspx
      

  6.   

    最好用Linq to XML 不过我不会
    我用的方法很笨的
      

  7.   


            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;
            }    }
      

  8.   

    我方法很土就是把xml读取到datatable中然后for循环读里面的东西
    如果是就 累加
    然后添加到一个新的datatable中你要是需要我给你看看我的xml
    和结果
      

  9.   

    问下,这段代码的意思是把xml的内容存到两个dt中,然后比较,再把结果存到第三个dt中?
      

  10.   

    这个问题有很多种方法。楼上几位说的我认为都可行。
    比如Linq to XML,DataSet等都可以实现你的需求。
    XPathNodeIterator只是一个快速定位xml提取数据的类。
    如果只求数据之和的话,我认为这个还是比较方便快捷的。另外再告知楼主一个方法,那就是xml序列化。自动基于xml文件生成类,
    然后提取需要数据,进行求和。