2009-03-12 7 views
1

Ich möchte den Wert/untergeordneten Elemente eines Elements festlegen, das möglicherweise bereits vorhanden ist oder nicht. Wenn das Element nicht existiert, möchte ich es automatisch für mich erstellen lassen.Element in LINQ-to-XML suchen oder erstellen

Auf diese Weise muss sich mein Code nur um den Inhalt des Elements kümmern ... nicht ob es bereits existiert oder nicht. (Wenn ich damit fertig bin, ist es garantiert vorhanden).

Gibt es diese Funktionalität bereits in LINQ-to-XML? Ich habe es noch nicht gefunden und überlege mir, meine eigene Methode zu schreiben.

Antwort

4

Hier ist, was ich bisher:

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; 
} 

Beachten Sie, dass das erste Argument (für die Erweiterung) ist ein XElement, kein XContainer wie System.Xml.Linq.Extensions.Elements. Der einzige andere Nicht-XElement-XContainer ist XDocument, und diese Methode funktioniert nicht (und macht wenig Sinn) für ein XDocument.

Verwandte Themen