2013-07-19 116 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

相關問題