XML Datei Lesen (Schreiben, Ändern)

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    XML Datei Lesen (Schreiben, Ändern)

    Hallo Zusammen,

    Ich versuche vergebens die Angehängte xml Datei auszulesen und in Textboxen abzulegen

    TextBox1 = Alle Serien (Serie A|Serie B)
    TextBox2 = Alle Staffeln der Gewählten Serie (Ausgabe zB: 1,2)
    TextBox3 = Alle Folgen der Gewählten Staffel (Ausgabe zB: 1: Folge A, 2: FolgeB, 3: Folge C)

    Später soll das ganze noch erweitert werden mit Schreiben und Ändern
    Dateien
    • Serien.xml

      (1,24 kB, 229 mal heruntergeladen, zuletzt: )
    Hast du angehängte XML selbst erstellt oder hast du von jemanden bekommen?
    Wenn du diese selbst erstellt hast, würde ich den Weg über XML-Serialisierung gehen.
    Hierzu erstellst du eine normale .Net Klasse und kennzeichnest diese mit [Serializeable]. Anschließend kannst du ein Objekt der Klasse als XML serialisieren und speichern/laden.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Hab es jetzt soweit das die Liste mit den Serien angezeigt wird, kann mir noch jemand Helfen bei den Staffeln?

    das alle Staffeln der "Serie Nr1" in einer listBox erscheinen, und alle Folgen der "Staffel Nr1" in einer weiteren listBox

    C#-Quellcode

    1. private void button_Click(object sender, RoutedEventArgs e)
    2. {
    3. textBox.Clear();
    4. var xml = XElement.Load("C:/Users/Patrick/Documents/SerienData.xml");
    5. var q = from esoxi in xml.Descendants("Serie")
    6. select new
    7. {
    8. Serie = esoxi.Attribute("Name").Value
    9. };
    10. foreach (var k in q)
    11. {
    12. listBox.Items.Add(k.Serie);
    13. }
    14. }
    Vom Prinziep her Ja! Danke!

    aber Optisch nicht wirklich ansprechen, darum mein gendanke mit ListBox und Button als Ausgabe dan für die einzelnen Serien (diese solten dan anklickbar sein und die Farbe änder)

    mir würde wirklich ein einfaches grundgerüst reichen (das auslesen der xml wie beschrieben)! anpassen und erweitern (button etc) schaff ich alleine (evt kurzer kommentar im code?)
    na, wenn du findest, Listboxen seien schicker...

    Nur das Einlesen wie gezeigt geht nicht, weil ich zeige dir, wie man anders einliest, nämlich:

    VB.NET-Quellcode

    1. Serien.ReadXml(_DataFile.FullName)


    Und die Gimmicks mit Anklicken und Farbe ändern überlass ich erstmal dir. Ist vergleichsweise aufwändig und eiglich unwichtig.

    Im Code weiß ich nicht recht was zu kommentieren - welche Zeile bedarf eines Kommentars?

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports SerienTester.Serien
    3. Public Class frmMitListbox
    4. Private _DataFile As New FileInfo("..\..\Serien.xml")
    5. Private Sub AnyButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btReLoad.Click, btSave.Click, btTest.Click, Button1.Click, Button2.Click, Button3.Click
    6. Select Case True
    7. Case sender Is btReLoad
    8. For Each bs In {SerieBindingSource, StaffelBindingSource, FolgeBindingSource}
    9. bs.CancelEdit()
    10. Next
    11. Serien.ReadXml(_DataFile.FullName)
    12. Case sender Is btSave
    13. For Each bs In {SerieBindingSource, StaffelBindingSource, FolgeBindingSource}
    14. bs.EndEdit()
    15. Next
    16. Serien.WriteXml(_DataFile.FullName)
    17. Case sender Is Button1
    18. MessageBox.Show(DirectCast(DirectCast(SerieBindingSource.Current, DataRowView).Row, SerieRow).Titel)
    19. Case sender Is Button2
    20. MessageBox.Show(DirectCast(DirectCast(StaffelBindingSource.Current, DataRowView).Row, StaffelRow).Nummer)
    21. Case sender Is Button3
    22. MessageBox.Show(DirectCast(DirectCast(FolgeBindingSource.Current, DataRowView).Row, FolgeRow).Folge_Text)
    23. End Select
    24. System.Media.SystemSounds.Asterisk.Play()
    25. End Sub
    26. End Class
    weil mehr Zeilen sinds ja nicht

    Und das mit den Listboxen hat halt den nachteil, du wolltest doch ändern, zufügen, löschen.
    Listbox kann das alles nicht, aber DatagridView kann.
    Dateien

    ErfinderDesRades schrieb:

    Und das mit den Listboxen hat halt den nachteil, du wolltest doch ändern, zufügen, löschen.
    Listbox kann das alles nicht, aber DatagridView kann.


    Man kann doch xml Dateien auch nachträglich ändern und hinzufügen in ein XML Dokument? Sucht man da nicht auch wieder die Zeilen und fügt dann danach was ein? ich habe soviel zu dieser xml Sache gefunden, aber soviel durcheinander und bin dadurch eigentlich mehr verwirrt.

    ABER: Das sieht bis jetzt Richtig gut aus!!!

    Kannst du mir noch verraten wie Die Folge dann in einen Button gebracht wird? (Mein Gedanke war 20 Buttons Platzieren und dann mit Show() einblenden lassen und den Text aktualisieren)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „paq“ ()

    paq schrieb:

    Kannst du mir noch verraten wie Die Folge dann in einen Button gebracht wird? (Mein Gedanke war 20 Buttons Platzieren und dann mit Show() einblenden lassen und den Text aktualisieren)
    nein, weil ich verstehe nicht, was du meinst mit "Folge in einen Button bringen".
    Und 20 Button zu platzieren ist ebenfalls grotesk - was immer du auch damit vorhast.
    listboxen kann man nicht durch Button ersetzen.

    Doch, kann man schon, nur ergibt das keinen Sinn.

    Wie gesagt: Knackpunkt ist, dass das Datenmodell bislang garnix vorgesehen hat, um eine "IstGesehen" - Eigenschaft in irgendeiner Form auf Platte zu schreiben.

    Mir scheint, du musst dich mal mit dem Begriff "Datenmodellierung" vertraut machen.

    Ist erstaunlich, denn deine Xml-Datei war durchaus brauchbar, und ich konnte direkt ein Datenmodell daraus ableiten, also die Xsd-Datei (wenn du mal in die Sourcen guckst).
    Nun aber stehen Erweiterungen des Datenmodells an, aber da fehlt dir das Grundlagen-Wissen, um überhaupt zu verstehen, wovon die Rede ist.

    Ich sehe eiglich keine Möglichkeit, so weiter zu kommen.
    Ein Ansatz wäre codeproject.com/Articles/10309…l-Datamodel-for-Beginners

    Aber das wird für dich schwierig sein, den Bezug zu deine Listboxen und Buttons zu finden. Zumal der CodeProject-Artikel ein viel anspruchsvolleres Datenmodell entwickelt als deines.
    drum habe ich oben ja einen ganz anderen Ansatz versucht der meinen Anforderungen entspricht (mit LINQ solte das ja auch irgendwie möglich sein?) aber ich komme nie über einen gewissen punkt hinaus


    Es geht eigentlich darum ein bestehendes Projekt auf xml zu ändern, und das bassiert eben auf das von oben
    Wie gesagt - solange du dir keinen Begriff von Datenmodellierung erarbeitest, kommst du weder mit meinem Ansatz noch mit deinem Ansatz durch.

    Und glaub mir: Mein Ansatz ist einfacher - wie du siehst, kann man es damit in ca. 15 Zeilen lösen.

    Ausserdem ist er mächtiger, also ein auf normale Weise auf Xml aufbauendes Datenmodell kann bestimmte Anforderungen prinzipiell nicht bewältigen - das führe ich im gegebenen Tut auch aus.

    (Mein Ansatz baut übrigens auch auf Xml auf - deswegen konnte ich ja dein Xml verwenden - aber eben auf relationale Weise.)

    paq schrieb:

    Die ListBox auslesen und daraus dann Button generieren wäre Pfusch?
    Jepp - das wäre totale Katastrophe.

    So versuchens Leuts, die keinen Begriff von "Datenmodell" haben, und die Daten und Programmoberfläche schon im Kopf nicht auseinanderhalten können.

    Guck dir nochmal meine erste Lösung an, und beobachte, wie jedes Grid seinen angezeigten Inhalt komplett austauscht, je nachdem, welcher Datensatz im übergeordneten Grid angewählt ist.

    Und beachte, wie dieses Auswechseln sich 2-stufig fortpflanzt.
    Und beachte, dass das Auswechseln mal zu mehr und mal zu weniger angezeigten Datensätzen führt.

    So eine komplexe Funktionalität mit Auslesen von Listboxen und Generieren von Buttons hinzukriegen - dürfte dich Monate kosten, und wird immer noch Bugs haben.
    Also lern besser, wie mans macht, statt es mit dem zu versuchen, was du kennst (und was nicht ausreicht).