2014-03-03 64 views
0

在C#中,如何使用LINQ從XML文件中選擇值?簡單的LINQ到XML

這裏是我的XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<Level1> 
<Level2> 
    <Value1>This-is-value-1</Value1> 
    <Value2>This-is-value-2</Value2> 
    <Value3>This-is-value-3</Value3> 
    <Value4>This-is-value-4</Value4> 
</Level2> 
</Level1> 

這裏是我的代碼至今:

var doc = XDocument.Load(filename); 
var values = from lv1 in doc.Descendants("level1") 
      from lvl2 in lv1.Descendants("Level2") 
      select new { 
       Value1 = lv1.Attribute("Value1").Value, 
       Value2 = lv1.Descendants("Value2").Value, 
       Value3 = lv1.Descendants("Value3").Value, 
       Value4 = lv1.Descendants("Value4").Value, 
      }; 

我想檢索以下值:

  • 值1
  • Value2
  • 值3
  • 值4

我可以請有一定的幫助得到這個工作?

編輯

對不起,我的意思是補充一點,我想這些值按當地的領域。

E.g.以下是字段名稱:

string Value1; 
string Value2; 
string Value3; 
string Value4; 

我可以幫助將LINQ語句中的值放入本地字段嗎?

回答

6

有各種各樣的事情錯了你當前的代碼:

  • 您使用Attribute當沒有在XML
  • 你試圖使用Value財產上Descendants屬性,但Descendants回報IEnumerable<XElement>
  • 您沒有使用任何地方lv2
  • 您正在尋找level1作爲元素名稱,而不是Level1。 (XML是區分大小寫。)

我懷疑你只是想:

var doc = XDocument.Load(filename); 
var values = from level in doc.Descendants("Level1").Descendants("Level2") 
      select new { 
       Value1 = (string) level.Element("Value1"), 
       Value2 = (string) level.Element("Value2"), 
       Value3 = (string) level.Element("Value3"), 
       Value4 = (string) level.Element("Value4") 
      }; 
+0

喬恩,你可以請看看我的編輯? – user2985419