0

如果我有一个 xml 结构:

 <TablixMembers>
      <TablixMember>
        <Group Name="Group1" />
      </TablixMember>
 </TablixMembers>
...
 <TablixMembers>
      <TablixMember>
        <Group Name="Group1" />
      </TablixMember>
 </TablixMembers>
...
 <TablixMembers>
      <TablixMember>
        <Group Name="Details" />
      </TablixMember>
 </TablixMembers>
...

椭圆仅代表文档中的其他代码。我想选择除 Attributed as Details 之外的所有 Group 节点,并将它们的值更改为某个随机 guid。

我试过以下

var groupName = from gn in report.Descendants(ns + "Group")
                                 where gn.Name != "Details"
                                 select gn;

    foreach (var name in groupName)
    {
       string randomName = GenerateUniqueName("Group");
       name.SetAttributeValue("Name",randomName);
    }

但是,当我运行代码时,所有节点属性最终都会使用随机名称进行更新。预计该节点<Group Name="Details" />将从循环中排除。

我在选择语句中缺少什么以排除包含的 Group 节点Name = "Deatils"

-干杯

4

1 回答 1

2

您当前正在寻找元素的名称 - 它将始终是Group(在任何命名空间中)。这就是XNode.Name财产的回报。您要提取属性的Name

var groupName = from gn in report.Descendants(ns + "Group")
                where (string) gn.Attribute("Name") != "Details"
                select gn;

我个人不会为此使用查询表达式。我会使用:

var groupName = report.Descendants(ns + "Group")
                      .Where(gn => (string) gn.Attribute("Name") != "Details");
于 2013-07-19T17:43:22.473 回答