2009-03-12 5 views
1

Je souhaite définir la valeur/enfants d'un élément existant ou non. Si l'élément n'existe pas, je veux l'avoir créé automagiquement pour moi. De cette façon, mon code n'a qu'à se soucier du contenu de l'élément ... pas qu'il existe déjà ou non. (Au moment où j'en ai fini, c'est garanti d'exister).Rechercher ou créer un élément dans LINQ-to-XML

Cette fonctionnalité existe-t-elle déjà dans LINQ-to-XML? Je ne l'ai pas encore trouvé, et j'envisage d'écrire ma propre méthode.

Répondre

4

Voici ce que j'ai jusqu'à présent:

public static IEnumerable<XElement> ElementsOrCreate(this XElement parent, XName name) 
{ 
    IEnumerable<XElement> elements = parent.Elements(name); 
    if (!elements.Any()) 
    { 
     XElement element = new XElement(name); 
     parent.Add(element); 
     elements = new XElement[] { element }; 
    } 
    return elements; 
} 

Notez que le premier argument (pour l'extension) est un XElement, pas un XContainer comme System.Xml.Linq.Extensions.Elements. Le seul autre XContainer non-XElement est XDocument, et cette méthode ne fonctionne pas (et n'a pas beaucoup de sens) pour un XDocument.

Questions connexes