如何按属性名称排除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语句中缺少什么
-欢呼
您当前正在查找元素的名称,它将始终是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");