如果我有一个xml结构:
<TablixMembers>
<TablixMember>
<Group Name="Group1" />
</TablixMember>
</TablixMembers>
...
<TablixMembers>
<TablixMember>
<Group Name="Group1" />
</TablixMember>
</TablixMembers>
...
<TablixMembers>
<TablixMember>
<Group Name="Details" />
</TablixMember>
</TablixMembers>
...
椭圆只代表文档中的其他代码。我想选择所有Group节点,除了一个Attributed as Details,并将它们的值更改为一些随机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" />
将从循环中排除。
我在select语句中缺少什么来排除包含Name = "Deatils"
-cheers
答案 0 :(得分: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");