2010-04-23 2 views
2

Je dispose d'un fichier XML comme ça:attribut XElement tri

<Users> 
    <User> 
     <Adress Name="bbbb"/> 
     <Adress Name="aaaa" /> 
    </User> 
</Users> 

Je veux trier User nœuds de l'élément dans l'ordre croissant. Comment puis-je commander des éléments Adress?

Nous vous remercions de votre aide.

+1

« Adresse » est une faute de frappe. Peut-être que vous voulez résoudre ce problème si c'est vraiment à quoi ressemblent vos fichiers. –

Répondre

8

Si le nœud est votre noeud utilisateur:

node.Elements("Adress").OrderBy(e=>e.Attribute("Name").Value) 
3

-vous simplement désireux de travailler avec les objets XML en mémoire ou que vous cherchez à stocker les résultats triés de retour dans un fichier?

Ce code montre la réorganisation des éléments dans un XDocument afin que vous puissiez l'enregistrer.

string xml = @"<Users> 
<User> 
<Address Name=""bbbb""/> 
<Address Name=""aaaa"" /> 
</User> 
<User> 
<Address Name=""dddd""/> 
<Address Name=""cccc"" /> 
</User> 
</Users> "; 

XDocument document = XDocument.Parse(xml); 

var users = document.Root.Elements("User"); 
foreach (var user in users) 
{ 
    var elements = user.Elements("Address").OrderBy(a => a.Attribute("Name").Value).ToArray(); 
    user.Elements().Remove(); 
    user.Add(elements); 
} 

Si vous voulez un ordre en mémoire modèle, alors vous pouvez le faire comme ça

var query = from user in document.Root.Elements("User") 
      select new 
      { 
       Addresses = from address in user.Elements("Address") 
          orderby address.Attribute("Name").Value 
          select new 
          { 
           Name = address.Attribute("Name").Value 
          } 
      }; 

foreach (var user in query) 
{ 
    foreach (var address in user.Addresses) 
    { 
     // do something with address.Name 
    } 
}