2014-02-09 96 views
-2

我有一个xml,它显示参数中的日期/时间和值卷。该XML看起来是这样的:从xml中的5个最后日期计算平均值c#

<data volume="1" date="Tue, 04 Feb 2014 10:00 am CET"/> 
<data volume="5" date="Wed, 05 Feb 2014 10:00 am CET"/> 
<data volume="1" date="Thu, 06 Feb 2014 10:00 am CET"/> 
<data volume="2" date="Fri, 07 Feb 2014 12:00 pm CET"/> 
<data volume="3" date="Fri, 07 Feb 2014 10:00 am CET"/> 
<data volume="4" date="Sat, 08 Feb 2014 12:00 am CET"/> 
<data volume="4" date="Sat, 08 Feb 2014 10:00 am CET"/> 
<data volume="1" date="Sun, 09 Feb 2014 10:00 am CET"/> 

我想从最近5天计算平均体积,这将是2月09日 - 2月05.我如何能做到这一点在C#中?另一个问题我怎样才能计算从多天的平均量?像

<data volume="2" date="Fri, 07 Feb 2014 12:00 pm CET"/> 
<data volume="3" date="Fri, 07 Feb 2014 10:00 am CET"/> 

这里是我到目前为止的代码:

 XmlNodeList nodes = xdoc2.SelectNodes("data"); 

     foreach (XNode n in nodes) 
     { } 
+0

到目前为止您尝试过的是什么? – Damith

+0

我所做的是取最后一个节点的属性日期并将其存储在局部变量中。之后,我不知道如何取其他日期 – user2962759

+1

显示你的代码。 –

回答

3

您可以使用LINQ到XML,下面会给你一些主意,开始

var xelement = XElement.Parse(@"<root> 
<data volume=""1"" date=""Tue, 04 Feb 2014 10:00 am CET""/> 
<data volume=""5"" date=""Wed, 05 Feb 2014 10:00 am CET""/> 
<data volume=""1"" date=""Thu, 06 Feb 2014 10:00 am CET""/> 
<data volume=""2"" date=""Fri, 07 Feb 2014 12:00 pm CET""/> 
<data volume=""3"" date=""Fri, 07 Feb 2014 10:00 am CET""/> 
<data volume=""4"" date=""Sat, 08 Feb 2014 12:00 am CET""/> 
<data volume=""4"" date=""Sat, 08 Feb 2014 10:00 am CET""/> 
<data volume=""1"" date=""Sun, 09 Feb 2014 10:00 am CET""/> 
</root>"); 

var fiveItems = xelement.Elements("data") 
.Select(x=> new{Date = DateTime.Parse(x.Attribute("date").Value.TrimEnd("CET".ToCharArray())) 
       ,Volume = int.Parse(x.Attribute("volume").Value)}) 
.GroupBy(x=>x.Date.Date) 
.Select(x=> new{ Date = x.Key, Volume = x.Average(k=>k.Volume)}) 
.OrderByDescending(x=>x.Date) 
.Take(5); 

如果从文件

加载
XDocument doc = XDocument.Load("data.xml"); 
var fiveItems = doc.Elements("data") 
.Select(x=> new{Date = DateTime.Parse(x.Attribute("date").Value.TrimEnd("CET".ToCharArray())) 
       ,Volume = int.Parse(x.Attribute("volume").Value)}) 
.GroupBy(x=>x.Date.Date) 
.Select(x=> new{ Date = x.Key, Volume = x.Average(k=>k.Volume)}) 
.OrderByDescending(x=>x.Date) 
.Take(5); 

上面会计算出平均值5天。如果要再次计算这五天的平均值,请执行以下操作:

TextBox1.Text = fiveItems.Average(x=>x.Volume); 
+0

我使用data.xml文件中的数据 – user2962759

+0

我在想的是,如果有多个来自同一日期的数据,请取最高和最低音量,计算平均值,以便平均值为当天的成交量 – user2962759

+0

我怎样才能在文本框中显示计算出来的平均值? – user2962759