c# LINQ XML属性过滤

本文关键字:过滤 属性 XML LINQ | 更新日期: 2023-09-27 18:15:35

我有以下XML:

<PlayerSetup>
    <CardDeck name="deckOfCards"/>
    <Card name="one"/>
    <Card name="two"/>
    <Card name="three"/>
    <Card name="four"/>
    <Token name="four"/>
</PlayerSetup>

我只需要检索属性name="four"的元素,我有以下代码:

var query = from d in xdoc.Descendants("PlayerSetup")
             where (string)d.Attribute("name").Value == "four"
             select d;

当然不起作用,不返回任何元素。知道吗?谢谢。

c# LINQ XML属性过滤

如果您想要"PlayerSetup"元素下的后代元素name="four",您可以这样做:

        var query = from d in xdoc.Descendants("PlayerSetup").Descendants()
                    where (string)d.Attribute("name") == "four"
                    select d;

如果您希望"PlayerSetup"元素至少有一个后代元素name="four",您可以这样做:

        var query = from d in xdoc.Descendants("PlayerSetup")
                    where d.Descendants().Any(c => (string)c.Attribute("name") == "four")
                    select d;

您想要查看 PlayerSetupDescendants ,因此获取它们:

var query = from d in xdoc.Descendants("PlayerSetup").Descendants()
            where d.Attribute("name")?.Value == "four"
            select d;
//query.Count == 2

这个解决方案使用c# 6语法

我想你们的问题大家早就知道了。

你可以在这里找到它:LINQ到XML查询属性

或在这里:如何在c#中使用LINQ获取xml元素的属性名

:)