LINQ-根据子元素的值进行简单选择

时间:2018-10-02 20:25:37

标签: c# linq

我在这里遇到一个问题,可以在C#中使用Xpath来解决。但是,我试图通过LINQ做到这一点,但我只是不知道该怎么做。 我有一个重复的Group2,其中有几个子节点。我想基于组2后代中元素的值选择“ Group2”。 提前寻求帮助。这是一个示例xml。

<Receive>
<Idoc>
    <EDI_DC40>
        <TabName>EDI_DC40</TabName>
    </EDI_DC40>
    <Group1>
        <Group2>
            <Group3>
                <SelectGroup2BasedonValueofThisNode>001</SelectGroup2BasedonValueofThisNode>
            </Group3>
        </Group2>
        <Group2>
            <Group3>
                <SelectGroup2BasedonValueofThisNode>002</SelectGroup2BasedonValueofThisNode>
            </Group3>
        </Group2>
        <Group2>
            <Group3>
                <SelectGroup2BasedonValueofThisNode>003</SelectGroup2BasedonValueofThisNode>
            </Group3>
        </Group2>
    </Group1>
</Idoc>

var _selectedGroup = document.Descendants("Group2");

这将选择所有第2组-但接下来我不确定如何将位置或选择位置。

var element = _cloneDocument.Descendants("Group2").Where(x => x.Value == "001");

好吧,我刚刚尝试了上面的代码,它似乎可以工作。我的下一个问题-这是正确的方法吗?或者,还有另一种推荐的方法。

1 个答案:

答案 0 :(得分:0)

您需要使用LINQ2XML inside where委托,例如:

var element = doc
    .Descendants("Group2")
    .Where
    (
        x => x.Descendants("SelectGroup2BasedonValueofThisNode").Single().Value == "001"
    )
   .Single();

这将为您提供:

<Group2>
  <Group3>
    <SelectGroup2BasedonValueofThisNode>001</SelectGroup2BasedonValueofThisNode>
  </Group3>
</Group2>

在DotNetFiddle上单击here作为示例。