Hur skulle ni skriva Linq för att få ut text="Partly Cloudy" temp="-2" i ren text? yweather är ju ett alias för ett namespace, xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" Så du behöver använda "http://xml ...." istället men problemet är ju att den också innehåller : och kommer att trigga samma fel. Skapa istället ett XNamespace objekt som motsvara detta namespace, slå sedan ihop detta namespace med namnet för elementet och du kommer nu inte att ha en sträng utan ett XName (yweather + "condition"), och det fungerar. Det funka fint dock har jag en fundering. Har du kollat vad det finns för fler metoder/egenskaper på objektet utöver ToString? Det finns två sätt att lösa det på. I frågan:Linq på xml data
Jag prova med Linq men han säger att man inte får använda : i Linq
Jag vill alltså använda raden:
<code>
<yweather:condition text="Partly Cloudy" code="29" temp="-2" date="Thu, 28 Jan 2010 4:50 am CET" />
</code>
XML-filen
<code>
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<rss version="2.0" xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
<channel>
<title>Yahoo! Weather - Skara, SE</title>
<link>http://us.rd.yahoo.com/dailynews/rss/weather/Skara__SE/*http://weather.yahoo.com/forecast/SWXX0130_c.html</link>
<description>Yahoo! Weather for Skara, SE</description>
<language>en-us</language>
<lastBuildDate>Thu, 28 Jan 2010 4:50 am CET</lastBuildDate>
<ttl>60</ttl>
<yweather:location city="Skara" region="" country="Sweden"/>
<yweather:units temperature="C" distance="km" pressure="mb" speed="km/h"/>
<yweather:wind chill="-8" direction="340" speed="22.53" />
<yweather:atmosphere humidity="83" visibility="9.99" pressure="982.05" rising="0" />
<yweather:astronomy sunrise="8:19 am" sunset="4:15 pm"/>
<image>
<title>Yahoo! Weather</title>
<width>142</width>
<height>18</height>
<link>http://weather.yahoo.com</link>
<url>http://l.yimg.com/a/i/us/nws/th/main_142b.gif</url>
</image>
<item>
<title>Conditions for Skara, SE at 4:50 am CET</title>
<geo:lat>58.38</geo:lat>
<geo:long>13.44</geo:long>
<link>http://us.rd.yahoo.com/dailynews/rss/weather/Skara__SE/*http://weather.yahoo.com/forecast/SWXX0130_c.html</link>
<pubDate>Thu, 28 Jan 2010 4:50 am CET</pubDate>
<yweather:condition text="Partly Cloudy" code="29" temp="-2" date="Thu, 28 Jan 2010 4:50 am CET" />
<description>
<![CDATA[
<img src="http://l.yimg.com/a/i/us/we/52/29.gif"/><br />
<b>Current Conditions:</b><br />
Partly Cloudy, -2 C<BR />
<BR /><b>Forecast:</b><BR />
Thu - Snow. High: -1 Low: -4<br />
Fri - Snow Showers. High: -4 Low: -11<br />
<br />
Full Forecast at Yahoo! Weather<BR/><BR/>
(provided by The Weather Channel)<br/>
]]>
</description>
<yweather:forecast day="Thu" date="28 Jan 2010" low="-4" high="-1" text="Snow" code="16" />
<yweather:forecast day="Fri" date="29 Jan 2010" low="-11" high="-4" text="Snow Showers" code="14" />
<guid isPermaLink="false">SWXX0130_2010_01_28_4_50_CET</guid>
</item>
</channel>
</rss>
</code>Sv: Linq på xml data
<code>
XDocument xdoc = XDocument.Load(@"c:\test.xml");
XNamespace yweather = XNamespace.Get("http://xml.weather.yahoo.com/ns/rss/1.0");
var q = from element in xdoc.Descendants("channel").Descendants("item").Descendants(yweather + "condition")
select new
{
text = element.Attribute("text"),
temp = element.Attribute("temp")
};
</code>Sv:Linq på xml data
jag skriver så härför att få ut värdera
<code>
foreach (var result in q)
{
Temp = result.temp.ToString();
Weather = result.text.ToString();
}
</code>
men Temp blir "temp=-11" och Weather="text=sunny" . Jag vill inte ha med variabelnamnen utan bara själva värdet går det att fixa på något enkelt sätt eller måste man köra med en replace/regex och ta bort det?Sv: Linq på xml data
Sv: Linq på xml data
select new
{
text = element.Attribute("text").Value,
temp = element.Attribute("temp").Value
};
Eller i for-satsen:
foreach (var result in q)
{
Temp = result.temp.Value;
Weather = result.text.Value;
}