2014-12-01 80 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