XML lesen und schreiben

  • VB.NET

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

    XML lesen und schreiben

    Na Leute,

    Also dann fange ich mal an :

    Ich habe ein Script welches mir in eine XML Datei schreibt und liest, jedoch nicht wie ich es will.
    Was dieses Script NORMALERWEISE tun sollte :
    -Beim registrieren in einem NEUEN <benutzer> tag.
    -Beim Klick auf den Speichern Button, soll er in das Feld schreiben (das ich auswähle), das zum Benutzer gehört (überprüfen auf den Namen)

    SCHREIBEN :
    Hier mein Code :

    VB.NET-Quellcode

    1. Public Sub createNode(ByVal pID As String, ByVal pName As String, ByVal pPrice As String, ByVal pJob As String, ByVal pStufe As String, ByVal pMission As String, ByVal pArbeit As String, ByVal writer As XmlTextWriter)
    2. writer.WriteStartElement("Benutzer")
    3. writer.WriteStartElement("Username")
    4. writer.WriteString(pID)
    5. writer.WriteEndElement()
    6. writer.WriteStartElement("Passwort")
    7. writer.WriteString(pName)
    8. writer.WriteEndElement()
    9. writer.WriteStartElement("Geld")
    10. writer.WriteString(pPrice)
    11. writer.WriteEndElement()
    12. writer.WriteStartElement("Job")
    13. writer.WriteString(pJob)
    14. writer.WriteEndElement()
    15. writer.WriteStartElement("Stufe")
    16. writer.WriteString(pStufe)
    17. writer.WriteEndElement()
    18. writer.WriteStartElement("Arbeit")
    19. writer.WriteString(pArbeit)
    20. writer.WriteEndElement()
    21. writer.WriteStartElement("Mission")
    22. writer.WriteString(pMission)
    23. writer.WriteEndElement()
    24. writer.WriteEndElement()
    25. End Sub
    26. Private Sub KryptonButton5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KryptonButton5.Click
    27. Try
    28. Dim writer As New XmlTextWriter(Application.StartupPath & "/Settings/benutzer.xml", System.Text.Encoding.UTF8)
    29. writer.WriteStartDocument(True)
    30. writer.Formatting = Formatting.Indented
    31. writer.Indentation = 3
    32. writer.WriteStartElement("Table")
    33. createNode(nameP, Form1.KryptonTextBox5.Text, gesamtP, str, str2, str3, MissionNr, writer)
    34. writer.WriteEndElement()
    35. writer.WriteEndDocument()
    36. writer.Close()
    37. MsgBox("Erfolgreich gespeichert")
    38. Catch
    39. MsgBox("NICHT erfolgreich gespeichert")
    40. End Try
    41. End Sub


    LESEN :

    VB.NET-Quellcode

    1. Private Sub KryptonDropButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KryptonDropButton2.Click
    2. Dim xmlFile As XmlReader
    3. xmlFile = XmlReader.Create(Application.StartupPath & "/Settings/benutzer.xml", New XmlReaderSettings())
    4. Dim ds As New DataSet
    5. Dim dv As DataView
    6. Dim dd As DataView
    7. ds.ReadXml(xmlFile)
    8. dv = New DataView(ds.Tables(0))
    9. dd = New DataView(ds.Tables(0))
    10. dv.Sort = "Passwort"
    11. dd.Sort = "Username"
    12. Dim index As Integer = dv.Find(KryptonTextBox5.Text)
    13. Dim name As Integer = dd.Find(KryptonTextBox6.Text)
    14. If name = -1 Then
    15. MsgBox("Name falsch!")
    16. Else
    17. If index = -1 Then
    18. MsgBox("Passwort falsch!")
    19. Else
    20. MsgBox("Erfolgreich eingeloggt!")
    21. BenutzerStart.Show()
    22. Me.Hide()
    23. End If
    24. End If
    25. xmlFile.Close()
    26. End Sub


    Was dieses Script JETZT tut :


    Beim registrieren :
    Es überschreibt den alten <benutzer> tag.
    Sonst funktioniert alles

    Beim speichern :
    Es klappt nichts, wie ich es haben will :D
    Es sollte eigentlich nur die Felder Geld, Job, Stufe, Arbeit, Mission ändern. Nicht Passwort und Username.
    Außerdem sollte es den jeweiligen RICHTIGEN User herausfinden (aus dem Benutzer - Username Tag heraussuchen wer den Namen nameP hat)
    Das Script dafür :

    SPEICHERN :

    VB.NET-Quellcode

    1. Private Sub KryptonButton5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KryptonButton5.Click
    2. Try
    3. Dim writer As New XmlTextWriter(Application.StartupPath & "/Settings/benutzer.xml", System.Text.Encoding.UTF8)
    4. writer.WriteStartDocument(True)
    5. writer.Formatting = Formatting.Indented
    6. writer.Indentation = 3
    7. writer.WriteStartElement("Table")
    8. createNode(nameP, Form1.KryptonTextBox5.Text, gesamtP, str, str2, str3, MissionNr, writer) -- nameP und Form1.Krypton... sollte NICHT geändert werden. Wenn ich es weglasse geht garnichts mehr.
    9. writer.WriteEndElement()
    10. writer.WriteEndDocument()
    11. writer.Close()
    12. MsgBox("Erfolgreich gespeichert")
    13. Catch
    14. MsgBox("NICHT erfolgreich gespeichert")
    15. End Try
    16. End Sub


    Meine XML :

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    2. <Table>
    3. <Benutzer>
    4. <Username>Test</Username>
    5. <Passwort>123</Passwort>
    6. <Geld>1000</Geld>
    7. <Job>Bettler</Job>
    8. <Stufe>0</Stufe>
    9. <Arbeit>0</Arbeit>
    10. <Mission>0</Mission>
    11. </Benutzer>
    12. </Table>


    Danke :D


    Greetz ~ xxchucki
    Sehr viel Arbeit kannstedir sparen, wennde gleich ein typisiertes Dataset aufsetzt.
    Da kann man
    • komplexere Daten-Zusammenhänge abbilden als mit Xml
    • speichern und laden mit 1 Befehl
    • die Daten müssen nicht von/nach String konvertiert wern
    gugge DB-Programmierung ohne Datenbank und weiterführende Links
    wieso denn jetzt MySql?
    Da musstedoch ebenso wie bei Xml alle Werte auf .Net-Framework-Typen mappen (mehr noch: sogar die Strings) - eine Arbeit, die das typisierte Dataset dir abnehmen könnte, wie der gegebene Link erläutert.
    Also was du mit Xml leisten kannst, kannste besser und einfacher mittm typ.Dataset leisten.
    Da noch eine DB zu hinterlegen ist eine zusätzliche Option, notwendig ab wasweißich 500000 Datensätzen oder Multi-User-Anwendungen.