按属性进行C#LINQ XML过滤

时间:2015-09-30 20:19:34

标签: c# xml linq

我有以下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;

当然,哪个不起作用,不返回任何元素。任何的想法 ?感谢。

3 个答案:

答案 0 :(得分:2)

如果您希望"PlayerSetup"元素下的后代元素名称=“四”,您可以这样做:

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

如果你想要至少有一个名字=“4”的后代元素的"PlayerSetup"元素,你可以这样做:

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

答案 1 :(得分:1)

您想要查看 Descendants的{​​{1}} ,请抓住这些:

PlayerSetup

此解决方案使用C#6语法

答案 2 :(得分:-1)

我认为你的问题已经很久了。

你可以在这里找到它: LINQ to XML query attributes

或在这里: How to get attribute names of element in xml by LINQ in C#

:)