计算xml c#中5个最后日期的平均值

时间:2014-02-09 10:31:33

标签: c# xml

我有一个xml,它显示参数中的日期/时间和值。 xml看起来像这样:

<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月9日 - 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)
        {   }

1 个答案:

答案 0 :(得分:3)

你可以使用Linq to 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);
相关问题