我需要一些帮助解析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结构。
谢谢你的帮助。道格
看起来你想要一些:
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")