我需要一些帮助解析XML与Linq

本文关键字:XML Linq 帮助 | 更新日期: 2023-09-27 18:06:07

我是c#和XML的新手,正在尝试为MediaPortal开发一个小的天气插件。我试图在Visual c# 2010 Express中使用Linq解析一些XML,并遇到了障碍。

这是我试图解析的XML的一个子集:

<forecast>
  <period textForecastName="Monday">Monday</period>
  <textSummary>Sunny. Low 15. High 26.</textSummary>
<temperatures>
  <textSummary>Low 15. High 26.</textSummary>
  <temperature unitType="metric" units="C" class="high">26</temperature>
  <temperature unitType="metric" units="C" class="low">15</temperature>
  </temperatures>
</forecast>
下面是目前为止我的工作代码:
XDocument loaded = XDocument.Parse(strInputXML);
var forecast = from x in loaded.Descendants("forecast")
select new
{
    textSummary = x.Descendants("textSummary").First().Value,
    Period = x.Descendants("period").First().Value,
    Temperatures = x.Descendants("temperatures"),
    Temperature = x.Descendants("temperature"),
    //code to extract high e.g. High = x.Descendants(...class="high"???),
    //code to extract low  e.g. High = x.Descendants(...class="low"???)
};

我的代码工作到我的占位符注释,但我不知道如何使用Linq从XML中提取高(26)和低(15)。我可以从"温度"手动解析它,但我希望我能学到更多关于XML结构。

谢谢你的帮助。道格

我需要一些帮助解析XML与Linq

看起来你想要一些:

High = (int)x.Descendants("temperature")
            .Single(e => (string)e.Attribute("class") == "high")

查找 temperature后代(如果没有或有多个,则抛出)具有属性class且值为high,然后将其值转换为整数。

但这并不完全清楚。

一个forecast元素可以有多个 temperatures元素吗?temperatures元素可以有多个temperature元素有class == "high" ?如何处理不同的unitTypes ?

要把元素取出来,你可以这样做:

Highs = x.Descendants("temperature")
         .Where(e => (string)e.Attribute("class") == "high")