LINQ to XML选择来自特定节点/节点的元素

时间:2015-04-14 02:56:42

标签: c# xml linq

我有一个XML文件,想根据文件内容创建对象。 XML文件如下所示:

<DefaultView>
    <Module>
      <Variable Name="gTestInt1" Enable="True" />
      <Task Name="Task1">
        <Variable Name="testInt" Enable="True" />
        <Variable Name="testReal" Enable="True" />
        <Variable Name="testString" Enable="True" />
      </Task>
      <Task Name="Task2">
        <Variable Name="testInt1" Enable="True" />
        <Variable Name="testReal" Enable="True" />
        <Variable Name="testString" Enable="True" />
      </Task>
    </Module>
</DefaultView>

我的LINQ语句如下:

var globalVariables = (from cfg in _xElements.Descendants("Module").Descendants("Variable")
                      select new Variable
                      {
                          Name = cfg.Attribute("Name").Value,
                          Enable = bool.Parse(cfg.Attribute("Enable").Value)
                      }).ToList(); 

所以我的问题是我获得了XML文件中的所有Variable对象,包括子节点中的那些(Task)。 但我只想要不在任何子节点中的Variable对象。只是模块节点中的那些。

我的LINQ查询必须如何才能获得此信息?

1 个答案:

答案 0 :(得分:2)

Descendants方法返回所有后代元素。您需要使用Elements代替。尝试这样的事情:

var globalVariables = (from cfg in _xElements.Descendants("Module")
                                             .Elements("Variable")
                      select new Variable
                      {
                          Name = cfg.Attribute("Name").Value,
                          Enable = bool.Parse(cfg.Attribute("Enable").Value)
                      }).ToList();