2017-01-31 5 views
0

Я следующие 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> 

Теперь мне нужно, чтобы выбрать все List узлов, которые имеют уникальный URL атрибуты, так что я только в конечном итоге с 3 узлами с моим примером.

Я уже выбрать все List узлы с помощью

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

Но я не знаю, как выбрать только узлы, которые имеют уникальный Url атрибут. Итак, как я могу это достичь?

+0

Вы пытаетесь группы по URL, используя System.Xml.Linq – Saravanan

ответ

0

Try XML с помощью LINQ GroupBy:

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(); 

     } 
    } 
}