2014-02-09 95 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