2014-12-01 82 views
0

的XML節點即時通訊做的天氣應用程序運行良好,但我遇到了一個問題。 將XML看起來像:只有獲得具有特定值

<city> 
    <city_code>DE0011259</city_code> 
    <name>Wegberg</name> 
    <url>deutschland/wegberg/DE0011259.html</url> 
    <post_code>41844</post_code> 
    <forecast> 
    <date value="2014-12-01"> 
     <w>2</w> 
     <tx>4</tx> 
     <pc>30</pc> 
     <time value="06:00"> 
     <w>2</w> 
     <tx>3</tx> 
     <pc>30</pc> 
     <tn>2</tn> 
     <ws>11</ws> 
     <w_txt>wolkig</w_txt> 
     </time> 
     <time value="11:00"> 
     <w>2</w> 
     <tx>4</tx> 
     <pc>20</pc> 
     <tn>3</tn> 
     <ws>12</ws> 
     <w_txt>wolkig</w_txt> 
     </time> 
     <time value="17:00"> 
     <w>2</w> 
     <tx>4</tx> 
     <pc>20</pc> 
     <tn>1</tn> 
     <ws>9</ws> 
     <w_txt>wolkig</w_txt> 
     </time> 
     <time value="23:00"> 
     <w>2</w> 
     <tx>1</tx> 
     <pc>30</pc> 
     <tn>1</tn> 
     <ws>7</ws> 
     <w_txt>wolkig</w_txt> 
     </time> 
     <tn>1</tn> 
     <ws>10</ws> 
     <w_txt>wolkig</w_txt> 
    </date> 
    </forecast> 
</city> 

很抱歉,如果我的英語是如此糟糕^^ 的問題是如何從其他time's獲取數據 我的問題是,我只從6獲取數據: 00和鴕鳥政策知道如何從17:00獲取數據或23:00

我爲獲得天氣代碼:

string xml; 
using (var webClient = new WebClient()) 
{ 
    xml = webClient.DownloadString(URL); 
} 
XDocument doc = XDocument.Parse(xml); 

string wind = doc.XPathSelectElement("/city/forecast/date/time/ws").Value + " km/h"; 
+1

使用'XPathSelectElements()'。 – abatishchev 2014-12-01 22:08:46

+0

[XPathSelectElemen](http://msdn.microsoft.com/en-us/library/bb351355%28v=vs.110%29.aspx) – MethodMan 2014-12-01 22:09:34

+0

'我不知道怎麼說我不想得到來自其他時間的結果。「您已經只獲得了第一個條目。問題是什麼。 – 2014-12-01 22:15:49

回答

0

我的問題是,我只能從6:00獲得的數據和鴕鳥政策知道如何從17獲取數據:00或23:00

好像你應該在你的XPath的條件,爲前,

string wind = doc.XPathSelectElement("/city/forecast/date/time[@value='17:00']/ws") 
       .Value + " km/h"; 

(見

如果你想獲得所有的值,那麼你可以使用XPathSelectElement**s**作爲評論中說的。

+0

謝謝你的工作就像一個魅力:) – Chakratos 2014-12-01 23:42:19

0

如果你想要做的是在你的XML 執行查詢在特定的時間,那麼它是很容易得到你想要的東西通過Linq To XML

XDocument doc = XDocument.Load(@"somePath\SO.xml"); 

// E.g. get ws value for time = "17:00"  
XElement specificElement = doc.Descendants("time") 
           .Where(t => t.Attribute("value").Value == "17:00") 
           .FirstOrDefault(); 
if (specificElement != null) 
{ 
    string wind = specificElement.Element("ws").Value + " km/h"; 
} 
+0

問題出在哪裏?它也可以通過xpath查詢輕鬆完成。 – 2014-12-01 22:58:23

+0

@ L.B。那麼,至少就我而言,目前還不清楚OP要做什麼。這就是爲什麼我在我的答案中使用斜體。如果他想要獲得特定時間的風速,那麼可以使用Linq to XML輕鬆完成。 xpath查詢也是一個選項。 – 2014-12-01 23:06:02

+0

即使我這樣做:specificElement.Element(「ws」)。它仍然給我的價值從6:00 – Chakratos 2014-12-01 23:19:41