2009-07-07 7 views
0

J'ai ce code:XLinq - Une meilleure façon

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 
         }; 

Bien que ce fait ce que je veux, je veux savoir s'il y a une meilleure façon de faire la fc.Element (« faible »). Element ("celsius") .Valeur de parties, de sorte que Element(). Element() soit un Element().

Voici un échantillon du 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> 

Merci

Répondre

0

Vous pouvez utiliser XElement.XPathSelectElements("xpathExpression") si vous voulez le faire de façon plus concise, mais il n'y a rien de mal à ce que vous avez fait.

Votre code est plus détaillé et plus facile à lire.

+0

Merci pour votre réponse! –

1

Vous devriez envisager d'utiliser sérialisation pour désérialiser un objet DayForcast de ce fragment XML.

+0

Je pense que l'OP veut connaître la façon LINQ de le faire. –

+0

Salut, merci pour la réponse. Le résultat provient d'un flux RSS que je n'arrive pas à sérialiser ... Je ne suis pas du tout familier avec la sérialisation. –

Questions connexes