2017-01-31 10 views
0

でユニークな属性を持つすべてのノードを選択:今、私は私だけで終わるように、ユニークなURL属性を持つすべてのListのノードを選択する必要が私はXMLファイル以下のいる特定の名前とXMLDocumentの

<RightsSetup> 
    <Group Name="Sachbearbeiter"> 
    <List Url="Lists/List1"> 
     <RoleDefinition ID="3" /> 
    </List> 
    <List Url="Lists/List2"> 
     <RoleDefinition ID="3" /> 
    </List> 
    <List Url="Lists/List3"> 
     <RoleDefinition ID="3" /> 
    </List> 
    </Group> 
    <Group Name="Administratoren"> 
    <List Url="Lists/List1"> 
     <RoleDefinition ID="3" /> 
    </List> 
    <List Url="Lists/List2"> 
     <RoleDefinition ID="3" /> 
    </List> 
    <List Url="Lists/List3"> 
     <RoleDefinition ID="3" /> 
    </List> 
    </Group> 
    <Group Name="Finanzverwalter"> 
    <List Url="Lists/List1"> 
     <RoleDefinition ID="0" /> 
    </List> 
    <List Url="Lists/List2"> 
     <RoleDefinition ID="0" /> 
    </List> 
    <List Url="Lists/List3"> 
     <RoleDefinition ID="0" /> 
    </List> 
    </Group> 
    <Group Name="Gutachter"> 
    <List Url="Lists/List1"> 
     <RoleDefinition ID="2" /> 
    </List> 
    <List Url="Lists/List2"> 
     <RoleDefinition ID="2" /> 
    </List> 
    <List Url="Lists/List3"> 
     <RoleDefinition ID="2" /> 
    </List> 
    </Group> 
    <Group Name="Mentoren"> 
    <List Url="Lists/List1"> 
     <RoleDefinition ID="2" /> 
    </List> 
    <List Url="Lists/List2"> 
     <RoleDefinition ID="2" /> 
    </List> 
    <List Url="Lists/List3"> 
     <RoleDefinition ID="2" /> 
    </List> 
    </Group> 
    <Group Name="Ausschuss"> 
    <List Url="Lists/List1"> 
     <RoleDefinition ID="2" /> 
    </List> 
    <List Url="Lists/List2"> 
     <RoleDefinition ID="2" /> 
    </List> 
    <List Url="Lists/List3"> 
     <RoleDefinition ID="2" /> 
    </List> 
    </Group> 
</RightsSetup> 

を私の例では3つのノードがあります。

私はすでに

this.XmlDocument.SelectNodes("//List"); 

を使用して、すべてのListのノードを選択しかし、私は唯一のユニークなUrl属性を持つノードを選択する方法がわかりません。だから私はこれをどのように達成できますか? GROUPBY使用

+0

あなたはsystem.xml.linqを使ってURLでグループにしてみてくださいました – Saravanan

答えて

0

てみたXML LINQ:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 

      var groups = doc.Descendants("Group").Select(x => new { 
       lists = x.Elements("List").Select(y => new { 
        url = (string)y.Attribute("Url"), 
        list = y 
       }) 
       .Select(z => new { name = (string)x.Attribute("Name"), list = z.list, url = (string)z.url}) 
      }).SelectMany(y => y.lists).GroupBy(x => x.url).ToList(); 

     } 
    } 
} 
関連する問題