Laden...

Wie kann ich Xml Code direkt in C# Code schreiben?

Erstellt von Acki vor 4 Jahren Letzter Beitrag vor 3 Jahren 983 Views
A
Acki Themenstarter:in
3 Beiträge seit 2020
vor 4 Jahren
Wie kann ich Xml Code direkt in C# Code schreiben?

Hallo liebe Gemeinde,

ich bin nun dabei meinen bisherigen Quellcode von VB in C# umzuwandeln und dabei bin ich auf das "Problem" gestoßen, dass ich aktuell nicht weiß, wie man Xml - Inhalt direkt in der C# - Datei einfügt und leider hab ich auch keine Idee wonach ich googeln soll.

In VB hat man ja die Möglichkeit den Xml -Inhalt direkt in die VB-Datei einzutragen und das sogar mit Platzhaltern, aber ich vermute mal, dass geht in C# nicht, oder?

Return New XDocument(<?xml version="1.0" encoding="utf-8" standalone="yes"?>
                                 <database>
                                     <database.info>
                                         <version>1.0.0.0</version>
                                         <create><%= String.Format("{0}T{1}", Now.ToShortDateString, Now.ToLongTimeString()) %></create>
                                         <lastupdate>15.01.2020</lastupdate>
                                         <lastchanged><%= Now.Ticks %></lastchanged>
                                     </database.info>
                                     <database.content>

                                     </database.content>
                                 </database>)

Darüber hinaus hat man auch mit "<%= " die Möglichkeit Inhalt während der Laufzeit dynamisch einzusetzen, aber das geht wahrscheinlich auch nicht mehr, oder?

Am Ende bleibt mir bestimmt nur folgendes:


new XDocument(
  new XElement("Root",
    new XElement("Child", "ChildValue")
  )
)

Gruß Christian

2.080 Beiträge seit 2012
vor 4 Jahren

Schreib es als String und Werte einsetzen geht z.B. mit String Interpolation ziemlich einfach

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

P
441 Beiträge seit 2014
vor 4 Jahren

Du kannst das in C# genau so machen. Du musst lediglich dafür sorgen, dass du Interpolationen und Zeilenumbrüche in Strings haben darfst.

-> Interpolation geht mit $
-> Zeilenumbrüche mit @


int variablen = 15;
string multiLineInterpolation = @$"hallo
ich kann
mehrere zeilen und {variablen} oder auch {(variablen == 15 ? true : false)} Ausdrücke enthalten";

Wobei die Element Erzeugung per Objekt deutlich sauberer ist, als XML Code im Quellcode zu haben und diesen zur Laufzeit zu parsen. Dann lagere ihn lieber in eine extra Datei aus.

Abt hat mal was zu XML gebloggt, bezüglich XDocument vs. XmlDocument: https://schwabencode.com/CSharp/CSharp-XML-Tutorial

A
Acki Themenstarter:in
3 Beiträge seit 2020
vor 4 Jahren

Hi,

vielen Dank für die ultra schnelle und vor allem super hilfreiche Antwort.
Ich werde mich wahrscheinlich, dann aber doch für die Objekteerstellung entscheiden, das liest sich wahrscheinlich „sauberer“. Die String Interpolation ist aber eine super geniale Sache, für die ich gleich mal sogar einen Anwendungsfall hätte.

Ich danke euch vielmals ... der Abend ist gerettet.

Gruß Christian

2.080 Beiträge seit 2012
vor 4 Jahren

Ich hatte Mal den Fall, dass ich komplexere XML-Dokumente mit dynamischen Daten füllen und abspeichern musste. Die Struktur der Dokumente kannte ich zu dem Zeitpunkt noch nicht und es musste möglich sein, sie sehr schnell und möglichst im laufenden betrieb zu verändern.

Meine Lösung war eine Art Template, das ich als Datei neben die Exe gelegt habe, die konnte man dann auch später beliebig tauschen.
Im Programm selber hatte ich dann eine Art Mapping, welcher Wert in welches XML-Element geschrieben werden sollte, das Mapping fand mit XPath statt.
LINQ to XML (XDocument) kann XPath ganz gut, es war also ein Leichtes, die Elemente anhand des XPath zu finden und den Wert reinzuschreiben.

Geht sicher schöner, aber für meinen kleinen Anwendungsfall (und ich hatte praktisch keine Zeit) war das auch rückblickend die optimale Lösung.

Ich bin auch kein Fan davon, XML-Dokumente im C#-Code stehen zu haben, weder als String, noch als Objekt-Struktur.
XML schreit danach, dass man es immer wieder ändern muss, da will man das Programm natürlich nicht neu kompilieren müssen. Daher sollte man mMn. immer prüfen, ob es nicht besser wäre, den zusätzlichen Aufwand zu investieren und das Dokument als eigene Datei neben die Exe zu legen.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

A
Acki Themenstarter:in
3 Beiträge seit 2020
vor 3 Jahren

Hi,

ich weiß nicht, ob es überhaupt jemanden interessiert oder hilft, aber ich wollte nur noch mal mitteilen, für welchen Weg ich mich nun entschieden habe.

Ich bin nun tatsächlich dem letzten Ansagt gefolgt und habe eine Vorlage erstellt, jedoch direkt als "Embedded Resource", da ich so sicher sein kann, dass Sie auch wirklich vorhanden ist, wenn ich sie mal brauche. Da es auch eine sehr knappe und definitiv statische Struktur ist, kann ich mir auch sicher sein, dass sie in Zukunft aktuell bleibt und wahrscheinlich nicht oder nur ganz selten angepasst werden muss.

In diesem Sinne, noch einmal ein großes Danke an alle und ein schönes Wochenende.

Gruß Christian