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 » Grundlagen von C# » Xml Datei in DataGrid einlesen, bearbeiten im WPF und wieder abspeichern
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Xml Datei in DataGrid einlesen, bearbeiten im WPF und wieder abspeichern

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

Dabei seit: 01.01.2019
Beiträge: 7
Entwicklungsumgebung: Visual C#
Herkunft: Berlin


NorbertX21 ist offline

Xml Datei in DataGrid einlesen, bearbeiten im WPF und wieder abspeichern

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

Hallo,

ich verwende einen Code mit dem man eine Xml Datei einlesen und bearbeiten kann, diesen Code habe ich vor einiger zeit schonmal verwendet und damals funktionierte auch alles. Die Datei die ich jetzt einlesen und bearbeiten möchte ist eine andere und sie ist viel größer. Den Code habe ich angepasst aber das zurückspeichern der Werte klappt noch nicht ganz. Ich hoffe dass ihr mir weiterhelfen könnt, es ist bestimmt nur eine Kleinigkeit die falsch ist.

Gruß

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von NorbertX21 am 04.02.2019 23:09.

Neuer Beitrag 27.01.2019 15:33 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.328
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist online Füge T-Virus Deiner Kontaktliste hinzu

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

Was du vorhast ergibt keinen Sinn.
Dein XDocument muss beim speichern seine sämtlichen Daten einmal als XML serialisieren und dann in die Ziel Datei schreiben.
Wenn du dies nicht willst, kannst du nur mit einer eigenen XmlWriter Implementierung kümmern.
Ob sich der Aufwand aber lohnt, bezweifle ich etwas.

Oder arbeitest du mit Xml Dateien mit Größen von 1GB oder größer?
Ansonsten lohnt sich der Aufwand nicht.

Nachtrag:
Ggf. solltest du dir mal das Thema De-/Serialisierung mit XML in C# mal anschauen.
Vielleicht findest du dann auch einen besseren Ansatz mit einer einfachen C# Klasse.

Link
 https://docs.microsoft.com/de-de/dotnet/.../serialization/

T-Virus

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von T-Virus am 27.01.2019 18:16.

Neuer Beitrag 27.01.2019 18:13 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
NorbertX21 NorbertX21 ist männlich
myCSharp.de-Mitglied

Dabei seit: 01.01.2019
Beiträge: 7
Entwicklungsumgebung: Visual C#
Herkunft: Berlin

Themenstarter Thema begonnen von NorbertX21

NorbertX21 ist offline

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

Die Xml Datei ist nicht größer als 1 GB, sehr viel kleiner. Ich möchte nur bestimmte Werte verändern, diese stehen in meinem Grid in Spalte 3. Es sind viele Einträge, die Werte die ich eintragen möchte stehen in TextBoxen (diese habe ich aus einer anderen Datei eingelesen). Es ist den Aufwand schon wert.
Neuer Beitrag 27.01.2019 20:13 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.328
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist online Füge T-Virus Deiner Kontaktliste hinzu

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

Was spricht den dagegen die Daten wie bisher per XDocument.Save zu speichern?
Im Endeffekt sollten die Daten ja dann genau so gespeichert werden, dass du die geänderten Werte hast.
Zwar muss dann die gesamte Datei geschrieben werden, aber wenn wir von weit weniger als 1GB reden, ist das keine große Sache für eine Festplatte.
Oder ändert sich die Datenstruktur oder welchen Grund gegen die aktuelle Lösung gibt es den?

Nachtrag:
In deinem Switch Case für den Speicher Dialog kannst du den No Case entfernen, da sich diese mit dem Default Case deckt.

T-Virus

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am 27.01.2019 21:06.

Neuer Beitrag 27.01.2019 21:03 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
NorbertX21 NorbertX21 ist männlich
myCSharp.de-Mitglied

Dabei seit: 01.01.2019
Beiträge: 7
Entwicklungsumgebung: Visual C#
Herkunft: Berlin

Themenstarter Thema begonnen von NorbertX21

NorbertX21 ist offline

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

Es spricht nichts dagegen, hab ich nicht gesagt. Der Code ist so wie ich ihn geschrieben habe nicht ganz richtig, und ich suche den Fehler. Du hast natürlich recht man kann das so machen.

Ich lese im moment nur einen Teil ein.

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von NorbertX21 am 27.01.2019 22:15.

Neuer Beitrag 27.01.2019 22:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
CDV# CDV# ist männlich
myCSharp.de-Mitglied

Dabei seit: 25.11.2018
Beiträge: 4
Entwicklungsumgebung: Visual studio
Herkunft: DE


CDV# ist offline

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

Daa geht so leider nicht. Man kann die werte nicht speichern

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von CDV# am 28.01.2019 08:57.

Neuer Beitrag 28.01.2019 08:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.328
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist online Füge T-Virus Deiner Kontaktliste hinzu

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

@CDV#
Und das soll nicht gehen weil?
Wenn ich die Daten im Grid bearbeite, kann ich diese auch wieder zurück speichern.
Es wäre hilfreich, wenn du deine Aussagen auch entsprechend belegst.
Geht nicht, ist keine Antwort.

T-Virus
Neuer Beitrag 28.01.2019 20:13 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.365
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

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

Es geht pauschal nicht, nur einen Teil einer (XML-)Datei einzulesen und dann nur diesen Teil wieder in dieser Datei abzuspeichern. Es muß immer die gesamte Datei gespeichert werden (sonst würde es ja auch andere Überladungen von XDocument.Save geben ;-).

Nur wenn sich die Länge des bearbeiteten Teils nicht ändert, dann könnte man diese in der Datei gezielt überschrieben (dies ist aber bei XML-Dateien nur selten gegeben und man müßte sich die exakten Positionen merken - und wehe jemand ändert dann währenddessen diese Datei...).
Neuer Beitrag 29.01.2019 08:50 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.071
Herkunft: Stuttgart/Stockholm


Abt ist offline

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

Mit XmlDocument geht das; mit XDocument nicht.
Neuer Beitrag 29.01.2019 19:12 Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.365
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

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

Meinst du so etwas wie den Anwendungsfall in  Serializing/deserializing partial XML files?

Trotzdem wird bei XmlDocument ja immer das gesamte XML-Dokument im Speicher gehalten (DOM), so daß zwar ein Teil geändert werden kann, aber immer das gesamte XML-Dokument wieder abgespeichert werden muß.
Neuer Beitrag 30.01.2019 09:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.071
Herkunft: Stuttgart/Stockholm


Abt ist offline

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

XmlDocument hält nicht das gesamte Dokument im Speicher, sondern arbeitet mit Streams.
Daher kann man mit XmlDocument auch sehr sehr, wirklich sehr große XML Dateien bearbeiten, die bei einem XDocument einem mit einer MemoryException um die Ohren fliegen - darauf war die Antwort bezogen.
Beim Speichern dürfte es nicht funktionieren, dass nur die Stelle X bis Y überschrieben wird. Vermute auch XmlDocument wird alles bügeln.
Neuer Beitrag 30.01.2019 10:29 Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.365
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

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

Bei  XmlDocument liest sich das aber anders:

Zitat:
Remarks

The XmlDocument class is an in-memory representation of an XML document. It implements the W3C XML Document Object Model (DOM) Level 1 Core and the Core DOM Level 2.

Ich glaube, du verwechselst dies mit einem  SAX-Parser (den es aber standardmäßig nicht im .NET gibt, mittels  XmlReader dem aber am nächsten kommt).

PS:  SAX.Net ist eine .NET Portierung des Java Sax Parsers.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am 30.01.2019 12:48.

Neuer Beitrag 30.01.2019 12:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.071
Herkunft: Stuttgart/Stockholm


Abt ist offline

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

Öh, richtig - hast Recht.
Meine XmlReader und nicht XmlDocument.
Neuer Beitrag 30.01.2019 12:48 Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.328
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist online Füge T-Virus Deiner Kontaktliste hinzu

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

@Abt
Hatte mir mal vor 1-2 Jahren auch den Spaß gegönnt mal von OpenStreetMaps die Daten von Geofabrik für Deutschland zu parsen.
Ohne den XmlReader wäre das nicht mal sinnvoll möglich gewesen.
Ist schon erstaunlich wenn man da am Stück 100GB durchparsen lässt und sich nur noch durch die Tags hangeln muss.

@Th69
Das die Umsetzung via XDocument so nicht machbar ist, hatte ich ja im ersten Post angedeutet.
Und bei einigen MB, selbst wenn wir von 100MB+ reden, großen XML Dateien lohnt sich es aus meiner Sicht auch nicht hier was neues zu bauen.

Leider weiß ich immer noch nicht was den nun das genaue Problem ist.
Da der TE hier auch kein Feedback gibt wo das Problem genau ist, sehe ich auch keine wirkliche Möglichkeit eine Lösung anzubieten.


T-Virus
Neuer Beitrag 30.01.2019 19:38 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
NorbertX21 NorbertX21 ist männlich
myCSharp.de-Mitglied

Dabei seit: 01.01.2019
Beiträge: 7
Entwicklungsumgebung: Visual C#
Herkunft: Berlin

Themenstarter Thema begonnen von NorbertX21

NorbertX21 ist offline

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

Vielen Dank für die Antworten

Dieser Beitrag wurde 5 mal editiert, zum letzten Mal von NorbertX21 am 04.02.2019 23:11.

Neuer Beitrag 03.02.2019 00:59 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.071
Herkunft: Stuttgart/Stockholm


Abt ist offline

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

 [FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt
 [Artikel] Debugger: Wie verwende ich den von Visual Studio?

Das Verarbeiten von XML (oder auch anderen Datenquellen) ist völlig unabhängig von der UI-Technologie.
 [Artikel] Drei-Schichten-Architektur wird Dir jetzt zu tief in die Sache gehen, zeigt aber den grundlegenden Aufbau von Anwendungen.

Du wirst aber nicht drum herum kommen, dass Du Dich mit der XML-Verarbeitung beschäftigen musst.
Wenn ein .NET UI-Element - wie ein Grid - Deine Anforderungen nicht zu 100% erfüllt, dann muss man eben programmieren.
Die Hauptaufgaben eines Entwickler sind eben nicht nur irgendwelche UI-Elemente in einem Editor zusammen zu klicken, sondern Code zu schreiben; so ist das nun mal ;-)
Neuer Beitrag 03.02.2019 13:48 Beiträge des Benutzers | zu Buddylist hinzufügen
NorbertX21 NorbertX21 ist männlich
myCSharp.de-Mitglied

Dabei seit: 01.01.2019
Beiträge: 7
Entwicklungsumgebung: Visual C#
Herkunft: Berlin

Themenstarter Thema begonnen von NorbertX21

NorbertX21 ist offline

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

Danke, ich werds mir anschauen. Das speichern krieg ich schon noch irgendwie hin. Die links von dir finde ich sehr gut. Kannst du mir bitte noch bei einer Sache helfen, den rest mach ich schon ... Was muss ich bei XPath (in meinem Bsp) angeben um die gesamte Datei einzulesen?

Oben bei XmlDataProvider hab ich die Source angegeben, einen XPath (University), einen XKey und einen Namen.

Das DataGrid hat ebenfalls eine ItemsSource mit Binding (XPath, hier Semester/Group/Students) und den XPath verwende ich auch bei den TextColumns dort für die Attribute @Name.

Den XPath beim DataGrid kann ich auch löschen, dann steht in jeder Spalte etwas drin, aber ich hab dann nur eine Zeile nicht mehr. Brauche ich vielleicht ein zweites Grid?
Neuer Beitrag 03.02.2019 17:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.071
Herkunft: Stuttgart/Stockholm


Abt ist offline

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

Mal in  Einzelnen Wert aus XML auslesen schauen.
Exakt das gleiche Problem wie hier; und dort hab ich bereits einen Stackoverflow Link gepostet, der hier genauso passt und XPath *sehr* ausführlich erklärt wird.
Mit dem kommst Du selbst schnell an Dein Ergebnis und lernst was dabei.
Neuer Beitrag 03.02.2019 17:21 Beiträge des Benutzers | zu Buddylist hinzufügen
NorbertX21 NorbertX21 ist männlich
myCSharp.de-Mitglied

Dabei seit: 01.01.2019
Beiträge: 7
Entwicklungsumgebung: Visual C#
Herkunft: Berlin

Themenstarter Thema begonnen von NorbertX21

NorbertX21 ist offline

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

Danke den link kenne ich bereits, damit konnte ich das bisherige Ergebnis erzielen. Wie ich was anzeigen kann weiss ich, in meinem Grid steht im moment entweder nur eine einzige Zeile oder die Attributes, (alle) aber ich schau mir Seite gerne nochmal an.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von NorbertX21 am 03.02.2019 17:51.

Neuer Beitrag 03.02.2019 17:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 8 Monate.
Der letzte Beitrag ist älter als 8 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 19.10.2019 14:17