簡體   English   中英

Linq to XML,僅采用具有特定子元素的元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM