XLinq - 更好的方法

时间:2009-07-07 10:45:24

标签: linq-to-xml

我有这段代码:

XDocument xdoc = XDocument.Load(URI);
            XElement root = xdoc.Element("forecast");
            //get the values into objects
            forecast = from fc in root.Descendants("simpleforecast").Elements("forecastday")
                       select new DayForcast
                       {
                           Date = new DateTime(int.Parse(fc.Element("date").Element("year").Value),
                               int.Parse(fc.Element("date").Element("month").Value),
                               int.Parse(fc.Element("date").Element("day").Value)),
                           Condition = fc.Element("conditions").Value,
                           Max = double.Parse(fc.Element("high").Element("celsius").Value),
                           Min = double.Parse(fc.Element("low").Element("celsius").Value),
                           Icon = fc.Element("icon").Value,
                           SkyIcon = fc.Element("skyicon").Value
                       };

虽然这样做了我想要的,但我想知道是否有更好的方法来执行fc.Element(“low”)。Element(“celsius”)。值部分,以便Element()。元素()是一个元素()。

以下是XML示例:

<?xml version="1.0" ?> 
<forecast>
<termsofservice link="http://www.wunderground.com/members/tos.asp#api" /> 
<txt_forecast>
  <date /> 
  <number /> 
</txt_forecast>
<simpleforecast>
  <forecastday>
  <period>1</period> 
  <date>
       <day>7</day> 
       <month>7</month> 
       <year>2009</year> 
       <yday>187</yday> 
       <hour>22</hour> 
  </date>
  <high>
      <fahrenheit>63</fahrenheit> 
      <celsius>17</celsius> 
  </high>
  <low>
      <fahrenheit>54</fahrenheit> 
      <celsius>12</celsius> 
  </low>
<conditions>Thunderstorm</conditions> 
<icon>tstorms</icon> 
<skyicon>cloudy</skyicon> 

由于

2 个答案:

答案 0 :(得分:1)

您应该考虑使用序列化从此xml片段反序列化DayForcast对象。

答案 1 :(得分:0)

如果您想更简洁地使用XElement.XPathSelectElements("xpathExpression"),可以使用{{3}},但您所做的事情并没有错。

您的代码更详细,更易于阅读。