2014-07-06 29 views
0

這個問題必須是容易的,但我面臨的一個問題,這與我對付不了:的LINQ to XML:找不到.xml文件確切根

我下載的XML文件與天氣信息這種方式,請隨時通過以下鏈接來檢查它:

new WebClient().DownloadFile("http://export.yandex.ru/weather-ng/forecasts/72503.xml", directoryName); 
var xml_file = XDocument.Load(directoryName); 

,我需要從.xml文件中得到一些數字:

string str_tweet = "Weather in New York: "; 

foreach (XElement el in xml_file.Root.Elements()) 
     { 
      if (el.Name == "fact") 
      { 
       MessageBox.Show("DID U FIND?"); 
       str_tweet += "temperature " + (string)el.Element("temperature"); 
       str_tweet += ", humidity " + (string)el.Element("humidity"); 
       str_tweet += ", pressure " + (string)el.Element("pressure") +"torr"; 
       str_tweet += ", wind power " + (string)el.Element("wind_speed") +"."; 

      } 
     } 

所以問題是,str_tweet保持不變,和0123沒有顯示。所以實際上他沒有找到任何fact根。我究竟做錯了什麼?

簡體.xml文件看起來是這樣的:

<forecast ...> 

<fact> 

<observation_time>2014-07-06T03:51:00</observation_time> 
<uptime>2014-07-06T04:36:15</uptime> 
<temperature plate="fff28e" color="F7F3D3">18</temperature> 
<wind_direction>calm</wind_direction> 
....... 

<fact> 
...... 
</forecast> 
+2

做你的預測元素有一個名稱空間? –

+0

@Selman22,老實說不明白你的問題,你的意思是什麼*預測元素*?無論如何,我猜不。 – Rocketq

+0

我在問你是否在你的預測元素中有xmlns =「something」 –

回答

1

如果您的預測元素有一個命名空間,那麼它所有的兒童有一個命名空間too.In這種情況下XElement.Name屬性將返回命名空間+元素的名字,所以它將不匹配fact。您可以更改條件:

if (el.Name.LocalName == "fact") 

或者,您可以指定命名空間,並直接得到你的元素:

XNamespace ns = "http://weather.yandex.ru/forecast"; 

foreach (XElement el in xml_file.Root.Elements(ns + "fact")) 
{ 
    MessageBox.Show("DID U FIND?"); 
    str_tweet += "temperature " + (string)el.Element(ns + "temperature"); 
    str_tweet += ", humidity " + (string)el.Element(ns + "humidity"); 
    str_tweet += ", pressure " + (string)el.Element(ns + "pressure") +"torr"; 
    str_tweet += ", wind power " + (string)el.Element(ns + "wind_speed") +"."; 
} 

有關XML命名空間是一個看的更多信息:Working with XML Namespaces

+2

另外,'el.Element(ns +「temperature」);' –

+0

和'var ns = xml_file.GetDefaultNamespace();' –

+0

@ HenkHolterman你是對的,但這不是更合適,他將來可能會有自定義命名空間。 –