Laden...

Transformieren von XML-Inhalten - mit Hilfe welcher Technologie?

Erstellt von suedsee vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.318 Views
S
suedsee Themenstarter:in
5 Beiträge seit 2019
vor 4 Jahren
Transformieren von XML-Inhalten - mit Hilfe welcher Technologie?

Hallo,

Ich muss in XML-Dateien bestimmte Werte in bestimmten Tags austauschen. Der Aufbau der XML-Dateien und die dazugehörigen Schemata (xsd) ändern sich 1 - 2 mal pro Jahr. Es gibt aktuell 4 verschiedene XML-Dateien mit unterschiedlichen Aufbauten (Tendenz steigend). Je nach XML-Datei sind für ca. 5 bis ca. 15 Tags die Inhalte auszutauschen. Die Werte die in diese Tags einzutragen sind, sind mir bekannt. Die Werte die in den angelieferten XML-Dateien drin stehen nicht.

Beispiel:
<Absender>Testmandant</Absender>
Nun soll "Testmandant" z. B. gegen "Mandant_1" ausgetauscht werden. Das Tag <Absender> kann in der XML-Datei 1 bis n-mal vorkommen.

Nachdem dann alle Tags ausgetauscht sind, soll die XML-Datei mit den neuen Werten gespeichert werden.

Welche Technologie (XmlTextReader, XmlDocument, XDocument, ?) würdet ihr empfehlen? Wie würdet ihr konkret vorgehen?

Vielleicht noch etwas zu meinen Kenntnissen: Ich programmiere schon seit vielen Jahren, aber erst seit relativ kurzer Zeit in C#. Linq kenne ich zum Beispiel noch gar nicht. Mit XmlDocument habe ich ein paar Erfahrungen gesammelt.

Bin gespannt auf eure Meinungen / Vorschläge. Vielleicht gibt es hierzu ja schon Webseiten / postings in denen die Vorgehensweise beschrieben wird. Ich bin nur gerade etwas erschlagen von den ganzen Möglichkeiten und vielleicht könnt ihr mir zumindest helfen "in die richtige Richtung zu laufen".

1.029 Beiträge seit 2010
vor 4 Jahren

Hi,

ich denke für sowas würde sich XDocument sehr gut anbieten. Praktisch kannst du das Programm so schreiben, dass man via XPath neue Werte für bestimmte Elemente vorgeben kann - und solange sich der XPath nicht ändert kann dir der Rest eigentlich egal sein.

Beispiel für XPath mit XDocument:
https://stackoverflow.com/questions/18508765/edit-specific-element-in-xdocument
(Musst ein wenig scrollen weil viele andere mit Linq arbeiten - das würde ich hier wohl eher vermeiden)

LG

Edit: Das Ganze sollte zumindest die kompakteste Art das zu programmieren sein.

656 Beiträge seit 2008
vor 4 Jahren

Eventuell wäre XSLT auch eine Überlegung wert, wenn es ggf. einfacher/schneller wäre direkt in einer Datei die Anweisungen zu hinterlegen (als eine Applikation zu schreiben, wo man dann recht viel Konfiguration braucht; abgesehen von der eigentlichen Applikationsentwicklung).
In .NET ist das wahlweise built-in über XslCompiledTransform (Limitiert auf XSLT 1.0) oder per zusätzlicher Library über Saxon-HE.Net (alle XSLT Versionen).

38 Beiträge seit 2019
vor 4 Jahren

Beim letzten Besipiel welches ich glaube das Taipi88 gemeint hat wird auch Linq verwendet. Ich hätte hierbei XmlDokument verwendet. Hier ist ein Beispiel:

XML:


<?xml version="1.0" encoding="utf-8" ?>
<StudienPartner>
  <Peter>Johannes</Peter>
  <Max>Johannes</Max>
  <Julian>Johannes</Julian>
</StudienPartner>

Angenommen Johannes nennt sich auf John um
Dann wäre dies dieser Code:

using System;
using System.IO;
using System.Xml;
//...

            string NameBefore = "Johannes";
            string NameAfter = "John";
            FileInfo file = new FileInfo("C:\\Test\\StudienPartner.xml");

            XmlDocument xml = new XmlDocument();
            xml.LoadXml(File.ReadAllText(file.FullName));

            foreach (XmlNode node in xml.LastChild.ChildNodes)
            {
                node.InnerText = node.InnerText.Replace(NameBefore, NameAfter);
            }

            //Löscht den inhalt der Xml und befüllt diese wieder.
            System.IO.File.WriteAllText(file.FullName, String.Empty);
            xml.Save(file.FullName);

Hoffe das es dir hilft 😃

LG BierDav

Trifft eine Programmiererin ihre Freundin und die Freundin fragt: "Mit welchen Typen hängst du so in letzter Zeit rum?" Die Programmiererin antwortet: „integers, booleans und strings“

3.003 Beiträge seit 2006
vor 4 Jahren

Das Topic sagt wortwörtlich "Transformation von XML-Inhalten". Für sowas gibt's XML-Transformationen (sic!). Also: XSLT. Das Gestochere mittels XDocument/XmlDocument ist an der Stelle fehl am Platz.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

2.207 Beiträge seit 2011
vor 4 Jahren

Hallo LaTino,

Das Topic sagt wortwörtlich "Transformation von XML-Inhalten".

da der Titel vorher war "Welche Technologie?" und somit absolut nichtssagend war, wurde der Titel von uns auf einen Text geändert von dem wir denken, dass er am besten passt und das Problem trifft. Es kann also sein, dass wir es falsch verstanden haben, aber das muss der TE sagen 😃

Gruss

Coffeebean

3.003 Beiträge seit 2006
vor 4 Jahren

Na okay 😄. Abgesehen davon ist XSLT hier angezeigt, denke ich. Kommt ohne Code, ohne Kompilieren und ohne sonstigen Quatsch aus und ist in jedem Texteditor in wenigen Minuten zu machen.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

S
suedsee Themenstarter:in
5 Beiträge seit 2019
vor 4 Jahren

Hallo zusammen,

erst einmal vielen Dank für die Antworten. Speziell der Link vom Taipi88 war Gold wert. Ich habe mich für die Variante von "No Idea For Name" entschieden, welche mit "here's a simple way to do this:" beginnt. Das fand ich am einfachsten zu verstehen und funktioniert auch gut.

Bezüglich des Topics: Ich wollte eine Unterscheidung zwischen XmlTextReader, XmlDocument, XDocument, XPath etc. beschreiben. Welches Wort passt hier denn besser als "Technologie"?

Warum ich kein XSL verwende: Das Programm tauscht nicht nur Werte in den XML-Tags aus, es macht noch einiges mehr. Zum Beispiel werden mehrere Tags in eine SQL Datenbank geschrieben, die Datei wird noch base64-kodiert und verschlüsselt und anschließend an eine WebAdresse übermittelt etc. (alles in diesem Programm). Sorry, hätte ich vielleicht VORHER noch erwähnen sollen.

Danke nochmals, ihr habt mir sehr weitergeholfen!

Gruß
suedsee