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 :-)