2010-01-31 7 views
4

Je n'arrive pas à résoudre ce problème en linq.Linq to Xml Convertir une liste

Comment puis-je convertir ceci:

<mytags> 
    <tag1>hello</tag1> 
    <tag2>hello</tag2> 
    <tag1>MissingTag</tag1> 
    <tag1>Goodbye</tag1> 
    <tag2>Goodbye</tag2> 
</mytags> 

à cette

List<MyObject> 

public class MyObject 
{ 
    public tag1; 
    public tag2; 
} 

Répondre

4

Essayez ceci:

string input = "<mytags><tag1>hello</tag1><tag2>hello</tag2><tag1>MissingTag</tag1><tag1>Goodbye</tag1><tag2>Goodbye</tag2></mytags>"; 
var xml = XElement.Parse(input); 
var list = (from x in xml.Elements("tag1") 
      let next = x.NextNode as XElement 
      select new MyObject 
      { 
       Tag1 = x.Value, 
       Tag2 = (next != null && next.Name == "tag2") ? next.Value : "" 
      }).ToList(); 

Cela ne fonctionne que pour les scénarios où tag2 manque, pas l'autre moyen de contourner.

+0

Que fait '.Dump()'? – CoderDennis

+0

@Dennis Je suppose que je n'étais pas assez rapide;) Je l'ai retiré de mon échantillon mais c'est en fait une méthode d'extension dans LINQPad qui déverse un objet dans la fenêtre de sortie. Très pratique pour le débogage rapide. Vous pouvez obtenir LINQPad pour l'essayer ou télécharger les échantillons VS2008 C# et il est inclus en tant que ObjectWriter. –

+0

Je tapais une réponse quand vous êtes arrivé, donc je l'ai vu tout de suite. Je ne travaille pas avec C# tout le temps, donc je n'étais pas sûr de la meilleure façon de le faire. Votre réponse est superbe! – CoderDennis