2013-07-19 113 views
0

排除XML属性的更新。如果我有一个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); 
    } 

然而,当我运行代码的所有节点的属性结了一个随机名称得到更新。预计节点<Group Name="Details" />将被排除在循环之外。

什么我在select语句缺少排除包含Name = "Deatils"

-cheers集团节点

回答

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"); 
+0

感谢您对属性与节点的解释。我同意查询表达式我只是不能让它更早地工作,因为我使用的是名称而不是属性。 – rlcrews

相关问题