Benutzer mit den meisten Antworten
XML-Dokument im Code erzeugen

Frage
-
Hallo zusammen,
wie wird am einfachsten folgendes Fragment als XML-Dokument per Code erzeugt?
<TestModus> <TestDetails> <Name>4711</Name> <Umgebung>Haus 1</Umgebung> <SystemName>Name</SystemName> <Beschreibung>Test 1</Beschreibung> </TestDetails> </TestModus>
Ich muss in eine Variable das XmlDocument erstellen das ich dann an eine Funktion übergebe was ein XmlDocument erwartet.
Wie könnte ich das am besten und relativ kurz erzeugen? Weitere Dokumente muss ich mit wesentlich mehr Zeilen erstellen, wird dann irgendwie unübersichtlich, oder?
Viele Grüsse,
Maximilian
Antworten
-
Gerade mit XML gibt es sehr viele Lösungswege. Der optimale Lösungsweg hängt von verschiedenen Randbedingungen ab. Ich liebe XElement, weil es so einfach ist. Hier mal eine Konsolendemo dazu:
Imports System.Xml Imports System.IO Module Module1 Sub Main() Dim res = GetData() Console.WriteLine(res.InnerXml) End Sub Private Function GetData() As XmlDocument Dim data = <TestModus> <TestDetails> <Name>4711</Name> <Umgebung>Haus 1</Umgebung> <SystemName>Name</SystemName> <Beschreibung>Test 1</Beschreibung> </TestDetails> </TestModus> Dim doc As New XmlDocument doc.Load(New StringReader(data.ToString)) Return doc End Function End Module
--
Viele Gruesse
Peter- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 5. September 2012 11:49
-
Dann schreib doch mal etwas zu den Randbedingungen: Wo kommen die Daten her? Wie sieht die Struktur aus, die als Ergebnis erforderlich ist? Welche Umwandlungsprozesse sind erforderlich? Um welche Datenmengen handelt es sich?In meinem Beispiel habe ich gezeigt, wie man aus einem XElement ein XMLDocument erzeugt. Das XElement muss entsprechend zu erzielender XML-Struktur und Ausgangsbedingungen erzeugt werden, ggf. in geschachtelten Schleifen. Problematisch ist das XElement nur, wenn es um große Datenmengen geht, da die gesamte Struktur ein XElement im RAM hält. Bei großen Datenmengen sind dann sequentielle Abläufe erforderlich, die Datenströme für die sofortige Ausgabe, z.B. in eine Datei ermöglichen.--
Viele Gruesse
Peter- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 5. September 2012 11:49
-
Man kann auch Platzhalter verwenden und dann mit Zeichenketten ersetzen. Das wird aber stressig, wenn sich die Ausgangswerte nicht in Variablen vom Typ String befinden. Schon bei Gleitkommazahlen ist die richtige Zeichendarstellung zu nutzen, komplizierter wird es bei Datumswerten. Weiterhin sind Namensraumkonventionen zu berücksichtigen, die ggf. erwartet werden.10 Elemente (die Frag ist, was damit gemeint ist) sollten, wenn ein Element nicht allzu viele Eigenschaften hat, für die Nutzung von Objekten vom Typ “XElement” kein Ressourcenproblem darstellen. Wichtig ist, wie die Eigenschaften der Elemente in der XML-Struktur zu platzieren sind, Attribute oder eingebettete Knoten mit Werten. Weiterhin ist ggf. ein Mapping zwischen Eigenschaftswerten und Knotennamen erforderlich, im ungünstigsten Fall mit Namensraum. Alles das sollte vorher geklärt werden, um dann einen optimalen Algorithmus auswählen zu können.--
Viele Gruesse
Peter- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 5. September 2012 11:49
Alle Antworten
-
Gerade mit XML gibt es sehr viele Lösungswege. Der optimale Lösungsweg hängt von verschiedenen Randbedingungen ab. Ich liebe XElement, weil es so einfach ist. Hier mal eine Konsolendemo dazu:
Imports System.Xml Imports System.IO Module Module1 Sub Main() Dim res = GetData() Console.WriteLine(res.InnerXml) End Sub Private Function GetData() As XmlDocument Dim data = <TestModus> <TestDetails> <Name>4711</Name> <Umgebung>Haus 1</Umgebung> <SystemName>Name</SystemName> <Beschreibung>Test 1</Beschreibung> </TestDetails> </TestModus> Dim doc As New XmlDocument doc.Load(New StringReader(data.ToString)) Return doc End Function End Module
--
Viele Gruesse
Peter- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 5. September 2012 11:49
-
Hallo Peter,
vielen Dank für Dein Script. Das es viele Lösungen gibt ist ja genau mein Problem :-)
Was ich damit fragen wollte, wie wird ein solches Xml-Dokument im Programm erzeugt wenn ich die Elemente in Echtzeit mit variablen Werten erzeugen muss?
Viele Grüsse,
Maximilian -
Dann schreib doch mal etwas zu den Randbedingungen: Wo kommen die Daten her? Wie sieht die Struktur aus, die als Ergebnis erforderlich ist? Welche Umwandlungsprozesse sind erforderlich? Um welche Datenmengen handelt es sich?In meinem Beispiel habe ich gezeigt, wie man aus einem XElement ein XMLDocument erzeugt. Das XElement muss entsprechend zu erzielender XML-Struktur und Ausgangsbedingungen erzeugt werden, ggf. in geschachtelten Schleifen. Problematisch ist das XElement nur, wenn es um große Datenmengen geht, da die gesamte Struktur ein XElement im RAM hält. Bei großen Datenmengen sind dann sequentielle Abläufe erforderlich, die Datenströme für die sofortige Ausgabe, z.B. in eine Datei ermöglichen.--
Viele Gruesse
Peter- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 5. September 2012 11:49
-
Hallo Peter,
überwiegend muss ich die obige Struktur mit knapp 10 weiteren Elemente je Dokument variable erstellen, die Values werden erst zur Laufzeit ausgelesen/erfasst und müssen dann in je einem XML-Dokument erfasst werden.
Mit diesem XML-Dokument wird eine Funktion aufgerufen die ein XmlDocument erwartet um daraus ein mit Rijndael verschlüsseltes XmlDocument zurück zugeben.
Dieses wird dann als File abgelegt.
Gruss,
Maximilian
PS:
Kann man hier auch Platzhalter verwenden die dann mit den Werten ersetzt werden?- Bearbeitet MaxiTesch Sonntag, 19. August 2012 08:00 Anpassung
-
Man kann auch Platzhalter verwenden und dann mit Zeichenketten ersetzen. Das wird aber stressig, wenn sich die Ausgangswerte nicht in Variablen vom Typ String befinden. Schon bei Gleitkommazahlen ist die richtige Zeichendarstellung zu nutzen, komplizierter wird es bei Datumswerten. Weiterhin sind Namensraumkonventionen zu berücksichtigen, die ggf. erwartet werden.10 Elemente (die Frag ist, was damit gemeint ist) sollten, wenn ein Element nicht allzu viele Eigenschaften hat, für die Nutzung von Objekten vom Typ “XElement” kein Ressourcenproblem darstellen. Wichtig ist, wie die Eigenschaften der Elemente in der XML-Struktur zu platzieren sind, Attribute oder eingebettete Knoten mit Werten. Weiterhin ist ggf. ein Mapping zwischen Eigenschaftswerten und Knotennamen erforderlich, im ungünstigsten Fall mit Namensraum. Alles das sollte vorher geklärt werden, um dann einen optimalen Algorithmus auswählen zu können.--
Viele Gruesse
Peter- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 5. September 2012 11:49
-
Hallo MaxiTesch,
Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.