如何按属性名称排除Xml属性的更新

本文关键字:属性 Xml 排除 更新 何按 | 更新日期: 2023-09-27 18:23:54

如果我有一个xml结构为:

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

椭圆只是表示文档中的其他代码。我想选择除"属性为详细信息"节点外的所有组节点,并将其值更改为某个随机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);
    }

然而,当我运行代码时,所有节点属性最终都会用一个随机名称更新。将期望节点CCD_ 1将被排除在循环之外。

排除包含Name = "Deatils" 的Group节点的select语句中缺少什么

-欢呼

如何按属性名称排除Xml属性的更新

您当前正在查找元素的名称,它将始终是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");