Erstellen von XML-Strukturen in C# (LINQ to XML)

Dieser Abschnitt enthält Informationen zum Erstellen von XML-Strukturen in C#.

Informationen zur Verwendung der Ergebnisse von LINQ-Abfragen als Inhalt für ein XElement finden Sie unter funktionale Konstruktion (LINQ to XML) im Vergleich.

Konstruieren von Elementen

Die Signaturen der XElement-Konstruktoren und der XAttribute-Konstruktoren ermöglichen es Ihnen, den Inhalt des Elements oder Attributs als Argumente an den Konstruktor zu übergeben.Da einer der Konstruktoren eine variable Anzahl von Argumenten akzeptiert, können Sie jede beliebige Anzahl von untergeordneten Elementen übergeben.Natürlich kann jedes dieser untergeordneten Elemente wiederum untergeordnete Elemente enthalten.Für jedes Element können Sie eine beliebige Anzahl von Attributen hinzufügen.

Wenn beim Hinzufügen von XNode-Objekten (einschließlich XElement) oder von XAttribute-Objekten der neue Inhalt kein übergeordnetes Element besitzt, werden die Objekte einfach an die XML-Struktur angefügt.Wenn der neue Inhalt bereits ein übergeordnetes Element besitzt und Bestandteil einer anderen XML-Struktur ist, wird der neue Inhalt geklont, und der neu geklonte Inhalt wird an die XML-Struktur angefügt.Dies wird im letzten Beispiel in diesem Thema gezeigt.

Zum Erstellen eines contacts-XElement-Objekts können Sie den folgenden Code verwenden:

XElement contacts =
    new XElement("Contacts",
        new XElement("Contact",
            new XElement("Name", "Patrick Hines"), 
            new XElement("Phone", "206-555-0144"),
            new XElement("Address",
                new XElement("Street1", "123 Main St"),
                new XElement("City", "Mercer Island"),
                new XElement("State", "WA"),
                new XElement("Postal", "68042")
            )
        )
    );

Bei ordnungsgemäßen Einzügen ähnelt der zum Konstruieren von XElement-Objekten verwendete Code sehr stark der Struktur des zugrunde liegenden XML-Codes.

Visual Basic verfolgt beim Erstellen von XML-Strukturen einen anderen Ansatz: Sie können XML direkt als XML-Literal in Ihr Visual Basic-Programm einbetten.Weitere Informationen finden Sie unter Einführung in XML-Literale in Visual Basic.

"XElement"-Konstruktoren

Die XElement-Klasse verwendet für die funktionale Konstruktion die folgenden Konstruktoren.Beachten Sie, dass es auch noch andere Konstruktoren für XElement gibt. Diese werden nicht für die funktionale Konstruktion verwendet und sind daher hier auch nicht aufgeführt.

Konstruktor

Beschreibung

XElement(XName name, object content)

Erstellt ein XElement.Der name-Parameter gibt den Namen des Elements an, und content gibt den Inhalt des Elements an.

XElement(XName name)

Erstellt ein XElement mit seinem XName, initialisiert für den angegebenen Namen.

XElement(XName name, params object[] content)

Erstellt ein XElement mit seinem XName, initialisiert für den angegebenen Namen.Die Attribute und/oder untergeordneten Elemente werden aus dem Inhalt der Parameterliste erstellt.

Der content-Parameter ist äußerst flexibel.Er unterstützt jede Art von Objekt, das ein gültiges untergeordnetes Element eines XElement ist.Die folgenden Regeln gelten für andere Arten von Objekten, die in diesem Parameter übergeben werden:

  • Eine Zeichenfolge wird als Textinhalt hinzugefügt.

  • Ein XElement wird als untergeordnetes Element hinzugefügt.

  • Ein XAttribute wird als Attribut hinzugefügt.

  • Eine XProcessingInstruction, ein XComment oder ein XText wird als untergeordneter Inhalt hinzugefügt.

  • Eine IEnumerable wird aufgelistet, und diese Regeln werden rekursiv auf die Ergebnisse angewendet.

  • Für alle anderen Arten wird deren ToString-Methode aufgerufen, und das Ergebnis wird als Textinhalt hinzugefügt.

Erstellen eines "XElement" mit Inhalt

Sie können mit einem einzigen Methodenaufruf ein XElement erstellen, das einfachen Inhalt enthält.Geben Sie dazu den Inhalt wie folgt als zweiten Parameter an:

XElement n = new XElement("Customer", "Adventure Works");
Console.WriteLine(n);

Dieses Beispiel führt zur folgenden Ausgabe:

<Customer>Adventure Works</Customer>

Sie können jede Art von Objekt als Inhalt übergeben.So erstellt z. B. der folgende Code ein Element, das eine Gleitkommazahl als Inhalt enthält:

XElement n = new XElement("Cost", 324.50);
Console.WriteLine(n);

Dieses Beispiel führt zur folgenden Ausgabe:

<Cost>324.5</Cost>

Die Gleitkommazahl wird geschachtelt und an den Konstruktor übergeben.Die geschachtelte Zahl wird in eine Zeichenfolge konvertiert und als Inhalt des Elements verwendet.

Erstellen eines "XElement" mit einem untergeordneten Element

Wenn Sie eine Instanz der XElement-Klasse für das Inhaltsargument übergeben, erstellt der Konstruktor ein Element mit einem untergeordneten Element:

XElement shippingUnit = new XElement("ShippingUnit",
    new XElement("Cost", 324.50)
);
Console.WriteLine(shippingUnit);

Dieses Beispiel führt zur folgenden Ausgabe:

<ShippingUnit>
  <Cost>324.5</Cost>
</ShippingUnit>

Erstellen eines "XElement" mit mehreren untergeordneten Elementen

Sie können für den Inhalt mehrere XElement-Objekte übergeben.Jedes dieser XElement-Objekte wird zu einem untergeordneten Element.

XElement address = new XElement("Address",
    new XElement("Street1", "123 Main St"),
    new XElement("City", "Mercer Island"),
    new XElement("State", "WA"),
    new XElement("Postal", "68042")
);
Console.WriteLine(address);

Dieses Beispiel führt zur folgenden Ausgabe:

<Address>
  <Street1>123 Main St</Street1>
  <City>Mercer Island</City>
  <State>WA</State>
  <Postal>68042</Postal>
</Address>

Sie können eine ganze XML-Struktur erstellen, indem Sie das oben erwähnte Beispiel wie folgt erweitern:

XElement contacts =
    new XElement("Contacts",
        new XElement("Contact",
            new XElement("Name", "Patrick Hines"),                                                 
            new XElement("Phone", "206-555-0144"),
            new XElement("Address",
                new XElement("Street1", "123 Main St"),
                new XElement("City", "Mercer Island"),
                new XElement("State", "WA"),
                new XElement("Postal", "68042")
            )
        )
    );
Console.WriteLine(contacts);

Dieses Beispiel führt zur folgenden Ausgabe:

<Contacts>
  <Contact>
    <Name>Patrick Hines</Name>
    <Phone>206-555-0144</Phone>
    <Address>
      <Street1>123 Main St</Street1>
      <City>Mercer Island</City>
      <State>WA</State>
      <Postal>68042</Postal>
    </Address>
  </Contact>
</Contacts>

Erstellen eines leeren Elements

Wenn Sie ein leeres XElement erstellen möchten, übergeben Sie einfach keinen Inhalt an den Konstruktor.Das folgende Beispiel erstellt ein leeres Element:

XElement n = new XElement("Customer");
Console.WriteLine(n);

Dieses Beispiel führt zur folgenden Ausgabe:

<Customer />

Anfügen oderKlonen?

Wie bereits erwähnt, werden beim Hinzufügen von XNode-Objekten (einschließlich XElement) oder von XAttribute-Objekten für den Fall, dass der neue Inhalt kein übergeordnetes Element besitzt, die Objekte einfach an die XML-Struktur angefügt.Wenn der neue Inhalt bereits ein übergeordnetes Element besitzt und Bestandteil einer anderen XML-Struktur ist, wird er geklont, und der neu geklonte Inhalt wird an die XML-Struktur angefügt.

// Create a tree with a child element.
XElement xmlTree1 = new XElement("Root",
    new XElement("Child1", 1)
);

// Create an element that is not parented.
XElement child2 = new XElement("Child2", 2);

// Create a tree and add Child1 and Child2 to it.
XElement xmlTree2 = new XElement("Root",
    xmlTree1.Element("Child1"),
    child2
);

// Compare Child1 identity.
Console.WriteLine("Child1 was {0}",
    xmlTree1.Element("Child1") == xmlTree2.Element("Child1") ?
    "attached" : "cloned");

// Compare Child2 identity.
Console.WriteLine("Child2 was {0}",
    child2 == xmlTree2.Element("Child2") ?
    "attached" : "cloned");

Mit diesem Beispiel wird die folgende Ausgabe erzeugt:

Child1 was cloned
Child2 was attached

Siehe auch

Konzepte

Erstellen von XML-Strukturen