myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Datentechnologien » Transformieren von XML-Inhalten - mit Hilfe welcher Technologie?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Transformieren von XML-Inhalten - mit Hilfe welcher Technologie?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
suedsee suedsee ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.06.2019
Beiträge: 5
Entwicklungsumgebung: MS Visual Studio 2017


suedsee ist offline

Transformieren von XML-Inhalten - mit Hilfe welcher Technologie?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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".

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von suedsee am 05.06.2019 16:12.

Neuer Beitrag 05.06.2019 16:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Taipi88 Taipi88 ist männlich
myCSharp.de-Mitglied

avatar-3220.jpg


Dabei seit: 02.02.2010
Beiträge: 1.016
Entwicklungsumgebung: VS 2010
Herkunft: Mainz


Taipi88 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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/1850...nt-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.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Taipi88 am 05.06.2019 16:27.

Neuer Beitrag 05.06.2019 16:27 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
BhaaL BhaaL ist männlich
myCSharp.de-Mitglied

Dabei seit: 14.02.2008
Beiträge: 635
Entwicklungsumgebung: VS2017


BhaaL ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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).
Neuer Beitrag 05.06.2019 16:42 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
BierDav
myCSharp.de-Mitglied

avatar-4125.png


Dabei seit: 14.02.2019
Beiträge: 38
Entwicklungsumgebung: C#,Java(Android)


BierDav ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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-Code:
<?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:

C#-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
Neuer Beitrag 05.06.2019 17:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
LaTino LaTino ist männlich
myCSharp.de-Poweruser/ Experte

avatar-4122.png


Dabei seit: 03.04.2006
Beiträge: 2.999
Entwicklungsumgebung: Rider / VS2019 / VS Code
Herkunft: Thüringen


LaTino ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
Neuer Beitrag 06.06.2019 07:53 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Coffeebean Coffeebean ist männlich
myCSharp.de-Team

avatar-3295.gif


Dabei seit: 25.08.2011
Beiträge: 2.202
Entwicklungsumgebung: VS 2005-2017, VS Code
Herkunft: Deutschland/Schweiz


Coffeebean ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo LaTino,

Zitat von 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
Neuer Beitrag 06.06.2019 08:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
LaTino LaTino ist männlich
myCSharp.de-Poweruser/ Experte

avatar-4122.png


Dabei seit: 03.04.2006
Beiträge: 2.999
Entwicklungsumgebung: Rider / VS2019 / VS Code
Herkunft: Thüringen


LaTino ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Na okay :D. 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
Neuer Beitrag 06.06.2019 09:30 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
suedsee suedsee ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.06.2019
Beiträge: 5
Entwicklungsumgebung: MS Visual Studio 2017

Themenstarter Thema begonnen von suedsee

suedsee ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
Neuer Beitrag 06.06.2019 10:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 26.09.2020 00:44