2009-11-16 192 views
1

我想問一個oldie(但是好的)Reading the list of References from csproj files(儘管我不是那個問題的作者)的後續問題。Linq to XML,只接受具有某個子元素的元素

在我的文件的csproj解析,我需要選擇具有鏈接元素作爲孩子的所有編譯元素。

我第一次嘗試的答案延伸到鏈接的問題如下:

IEnumerable<string> links = csprojFile 
     Element(msbuild + "Project") 
     .Elements(msbuild + "ItemGroup") 
     .Elements(msbuild + "Compile") 
     .Where(element => element.HasElements) 
     .Attributes("Include") 

這顯然是不夠的,因爲它選擇具有任何類型的孩子的所有元素(因此而選擇我想要的一些中,也挑選額外)。所以然後我嘗試:

IEnumerable<string> links = csprojFile 
     .Element(msbuild + "Project") 
     .Elements(msbuild + "ItemGroup") 
     .Elements(msbuild + "Compile") 
     .Where(element => element.HasElements && element.Descendants("Link").Any()) 
     .Attributes("Include") 
     .Select(element => element.Value); 

...它不返回任何東西。我是Linq的初學者,尤其是Linq2XML的初學者,但對我來說,「Where」子句說:「元素有孩子,至少有一個孩子名爲Link」。那是錯的嗎?

非常感謝幫助。

回答

3

我懷疑這是一個名稱空間問題 - 您沒有使用「鏈接」命名空間。試試這個:

IEnumerable<string> links = csprojFile 
     .Element(msbuild + "Project") 
     .Elements(msbuild + "ItemGroup") 
     .Elements(msbuild + "Compile") 
     .Where(element => element.Descendants(msbuild + "Link").Any()) 
     .Attributes("Include") 
     .Select(attr => attr.Value); 

(該HasElements是不是真的有必要)

+1

工程就像一個魅力,謝謝。我知道它應該在那裏,而且在我看來它是(它顯然超過了我的眼睛看到的),有時需要另一個人指出(並笑)顯然:) – 2009-11-16 20:01:51