2011-12-15 66 views
2

我有一個XML文件說(的test.xml)現在使用的XDocument類讀取XML數據

<root loc-ver="1.0"> 
    <data name="String1" xml:space="preserve"> 
     <value loc="root_data_value_2">Description number1</value> 
    </data> 
    <data name="String2" xml:space="preserve"> 
     <value loc="root_data_value_3">Description number 2</value> 
    </data> 
</root> 

,如果

我指定的名稱= 「字符串1」,我應該得到的值作爲「說明NUMBER1"

我指定的名稱=‘String2的’,我應該得到的值作爲說明NUMBER2

我用的方法試圖通過沒有結果

XDocument doc = XDocument.Load(@"D:\test.xml"); 
string search = "String10"; 

var lv1s = from lv1 in doc.Descendants("data") 
      select lv1.Name; 

回答

5

聽起來像是你想:

string name = "String1"; // Or whatever 
var query = from data in doc.Descendants("data") 
      where (string) data.Attribute("name") == name 
      select (string) data.Element("value"); 

string description = query.First(); // Or FirstOrDefault etc 

你應該考慮你想要什麼發生,如果不是正好有一個結果。那是一個錯誤狀態(如果有的話,使用Single()),你應該使用所有的結果(如果有的話,只是遍歷query),你應該使用的第一個結果,如果它是可用的,否則忽略它(如果是的話,使用FirstOrDefault()和檢查結果爲空),你應該使用的第一個結果,如果沒有任何(如果有的話,使用First())這是一個錯誤。