Mehr von Jürgen Gutsch

Mehr von Jürgen Gutsch

Empfehlungen von Jürgen Gutsch

Blog-Empfehlungen von Jürgen Gutsch

Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe

Jürgen Gutsch

ASP.NET und mehr...
LINQ to XML - XML Daten erzeugen und in ein vorhandenes XML Dokument einfügen

Ziel ist es einen vorgegebenen XML Knoten in ein vorhandenes XML Dokument einzufügen. Das XML soll folgendermaßen aussehen:

<layout folder="MyFolder" startPage="Home" name="HomePage">
  <displaynames>
    <displayname language="de-DE" value="Startseite" />
    <displayname language="en-US" value="Home page" />
    <displayname language="fr-FR" value="page d'accueil" />
  </displaynames>
</layout>

Nach einem kurzen Blick in die MSDN war das Prinzip um so ein XML zu erstellen relativ klar. Anhand eines selbstdefinierten Layout-Objektes ("NewLayout"), kann ich das XML wie folgt zusammenbauen.

XElement layout = new XElement("layout",
    new XAttribute("folder", NewLayout.Folder),
    new XAttribute("startPage", NewLayout.StartPage),
    new XAttribute("name", NewLayout.Name)
    );
XElement displaynames = new XElement("displaynames");
XElement displayname;
foreach (string key in NewLayout.DisplayNames.Keys)
{
    displayname = new XElement("displayname",
        new XAttribute("language", key),
        new XAttribute("value", NewLayout.DisplayNames[key])
        );
    displaynames.Add(displayname);
}
layout.Add(displaynames);

Mit Hilfe der Methode "Add()" der XElement Klasse kann ich beliebige weitere XElemente einfügen. Wer hätte gedacht, dass es doch sooooooh einfach ist...

Um das Element in ein vorhandenes Dokument einzufügen muss ich dieses nur öffnen und den Knoten selektieren in den ich mein erstelltes XElement einfügen möchte:

XDocument xdoc = XDocument.Load(this.XmlFilePath);
XElement xlayoutsNode = xdoc.Element("layouts");

xdoc.Element(); liefert das erste Kind-Element mit dem angegebenen Name. In meinem Fall ist es das Root-Element.

Anschließend muss ich nur noch mein Element einfügen und das XDocument speichern:

xlayoutsNode.Add(layout);
xdoc.Save(this.XmlFilePath);

That's all :-)

Posted: Mittwoch, 17. September 2008 09:25 von Jürgen Gutsch
Abgelegt unter: , , , ,

Kommentare

Jürgen Gutsch sagte:

Der im vorigen Artikel hinzugefügte knoten soll auch wieder entfernt werden können. Folgende paar Zeilen

# September 17, 2008 10:23
Anonyme Kommentare sind nicht zugelassen