2013-04-05 72 views
0

獲得價值我有XML我無法從XML

<?xml version="1.0" encoding="UTF-8"?> 
<info lang="ru" xmlns:x="http://www.yandex.ru/xscript"> 
    <region id="213" lon="37.617671" lat="55.755768" zoom="10"> 
     <title>Москва</title> 
    </region> 
    <traffic lon="37.617671" lat="55.755768" zoom="10"region="213"> 
     <length>489164.0</length> 
     <level>6</level> 
     <icon>yellow</icon> 
     <timestamp>1365162401</timestamp> 
     <time>15:46</time> 
     <url>http://maps.yandex.ru/moscow_traffic</url> 
     <title>Москва</title> 
    </traffic> 
</info> 

,我需要從「級別」獲得價值

public void GetText(string filename) 
    { 
     try 
     { 
      XDocument xDocument = LoadPage(filename); 
      if (xDocument.Root == null) return; 
      XElement elem = xDocument.Root.Element("info"); 
      if (elem != null) 
       foreach (var el in elem.Elements("traffic")) 
       { 
        Name = el.Element("level").Value; 
       }; 
     } 
     catch (Exception e) 
     { 
      MessageBox.Show(e.Message); 
     } 
    } 

的這塊代碼是好的另一個XML。它找不到「info」,而elem = null。這段代碼有什麼問題。或者我怎樣才能以其他方式獲得這個值。謝謝!

回答

3

這就是問題所在:

XElement elem = xDocument.Root.Element("info"); 

在你給我們的XML,xDocument.Rootinfo元素。只是修改成:

XElement elem = xDocument.Element("info"); 

,這將檢查根元素確實info

另一種方法是:

foreach (var el in xDocument.Elements("info") 
          .Elements("traffic")) 

這樣,你就不會進入循環體,如果Elements(info)返回一個空的集合。

編輯:如果你需要它來處理文檔,其中有時info是根元素,有時不是,您可能需要使用:

foreach (var el in xDocument.Descendants("info") 
          .Take(1) 
          .Elements("traffic")) 

(這是很奇怪的是在這種情況下雖然)

+0

+1:但是,看到代碼在另一個xml上工作,我認爲它表明'info'是當前的根目錄,但不是全部。他應該改變他的XLINQ來反映這一點。 – code4life 2013-04-05 12:42:05

+0

謝謝!它有用!) – user2110490 2013-04-05 12:46:23

+0

@ code4life:好點。將編輯。 – 2013-04-05 12:46:56