2011-03-09 74 views
0

我只是在這裏有一些代碼來澄清我對linq xml解析的疑惑。我有以下幾點:瞭解使用linq解析xml

... 
{ 

      XDocument xmlDoc = XDocument.Load(@"C:\Build.xml"); 
      var abc = from example in xmlDoc.Descendants("target") 
         select (string)target.Attribute("if"); 
      ... 
      foreach(string example in abc) 
      { 
      ... 
      } 

      ... 
      } 

我可以問,如果這是真的,在該行select (string)target.Attribute("if") 我從價值選擇從XML文件中的字符串「如果」如下面的XML文件中所示:

<xml> 
<target if="thevalue"> 
</target> 
</xml> 

然後我有這樣一行: foreach(string example in abc)

這是真的,對於「價值」的每一個選擇的字符串「如果」屬性,我做的foreach循環的東西。

+0

步驟通過調試,看看它會告訴你。 – BoltClock 2011-03-09 06:52:11

+0

我添加了一個斷點並檢查了abc是什麼。這就是他們所說的:{System.Linq.Enumerable.WhereSelectEnumerableIterator } base {System.Linq.Enumerable.Iterator }:{System.Linq.Enumerable.WhereSelectEnumerableIterator }我不確定它是否正確 – jeremychan 2011-03-09 06:59:30

回答

3

是的,這是正確的。 foreach循環中的變量「example」將包含「if」屬性的值。

var abc = from target in xDocument.Descendants("target") 
      select (string)target.Attribute("if"); 

    foreach (var example in abc) 
    { 
    Console.WriteLine(example); 
    } 

在控制檯應用程序中嘗試上述代碼,您將看到控制檯窗口中的值。或者你可以在不同類型的應用

這是一個更好的LINQ查詢表達式但是

var abc = from target in xDocument.Descendants("target").Attributes("if") 
      select target.Value; 

或更改您的LINQ查詢表達式

var abc = from target in xDocument.Descendants("target") 
      select target.Attribute("if").Value; 

的使用的Debug.WriteLine(例如)編輯 爲了幫助您解決調試器的問題: 我把鼠標移到了abc上,我看到調試器彈出信息窗口,如下圖所示

enter image description here

這第一個圖像顯示「結果視圖」有那些綠色箭頭。您需要點擊這些箭頭才能看到的結果(如消息旁邊說)

然後第二個圖像顯示你的結果 enter image description here

+0

+1 Nice調試器示例+截圖。 – BoltClock 2011-03-09 07:37:32

+0

@jeremychan我編輯了我的答案,包括一些圖像,我認爲可能會幫助你爲什麼你沒有看到變量abc(這是一個IEumerable或某種)的值, – 2011-03-09 07:37:42