[英]Linq to XML, only take elements that have a certain child element
我想問一個老歌(但好東西)的后續問題, 從csproj文件中讀取引用列表 (盡管我不是該問題的作者)。
在解析csproj文件時,我需要選擇所有將Link元素作為子元素的Compile元素。
我首先嘗試將答案擴展為鏈接的問題,如下所示:
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”。 錯了嗎
非常感謝您的幫助。
我懷疑這是名稱空間問題-您沒有將名稱空間用於“鏈接”。 嘗試這個:
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並不是必需的。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.