Schreibfunktion / überschreiben von XML einträgen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Sonaca schrieb:

    in verschiedene Richtungen zu denken
    Mach Dir eine Datenklasse und implementiere das Interface IXmlSerializable.
    Eigentlich brauchst Du den ganzen Kram nicht, wenn Du es so machst, wie ich es Dir in Post #2 vorgeschlagen habe.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Text
    2. Imports System.Xml.Serialization
    3. Public Class Form1
    4. Private pfad As String = "c:\temp\test.xml"
    5. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    6. Dim data = New MyXmlData
    7. data.Name = "Name"
    8. data.ServerURL = "http:\\www.zdf.de"
    9. data.Width = 42
    10. data.Height = 42
    11. Me.SaveXml(data, pfad)
    12. End Sub
    13. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    14. Dim data2 As MyXmlData
    15. data2 = Me.LoadXml(pfad)
    16. MessageBox.Show(data2.Name)
    17. End Sub
    18. Public Sub SaveXml(data As MyXmlData, file As String)
    19. ' Serialize object to a XML file.
    20. Using sw As New IO.StreamWriter(file, False, Encoding.Default)
    21. Dim x As New XmlSerializer(data.GetType())
    22. x.Serialize(sw, data)
    23. End Using
    24. End Sub
    25. Public Function LoadXml(file As String) As MyXmlData
    26. Dim data As MyXmlData = New MyXmlData()
    27. Try
    28. ' Deserialize XML file to a new object.
    29. Using sr As New IO.StreamReader(file, Encoding.Default)
    30. Dim x As New XmlSerializer(data.GetType())
    31. data = DirectCast(x.Deserialize(sr), MyXmlData)
    32. End Using
    33. Return data
    34. ' nix tun, die Settings-Instanz ist nicht valid
    35. Catch
    36. End Try
    37. Return data
    38. End Function
    39. End Class
    40. Public Class MyXmlData
    41. Public Property Name As String
    42. Public Property ServerURL As String
    43. Public Property Width As Integer
    44. Public Property Height As Integer
    45. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Sooo,
    Beim ersten Betätigen des Button4 erstellt er die XML und schreibt auch rein :)
    der Fehler taucht nun beim erneuten betätigen des Buttons auf, also wenn man den Inhalt erneut schreiben möchte,

    @RodFromGermany

    Danke für deine Anregung, aber ich muss leider gestehen das mir das noch ein wenig zu hoch ist :( leider

    Sonaca schrieb:

    zu hoch
    Deswegen hab ich Dir doch eben die Minimalvariante gepostet. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Finde deine Variante schonmal übersichtlicher

    magst du sie mir vll. für "dummis" nahebringen ?

    VB.NET-Quellcode

    1. habe rund 16 blöcke die so aussehen:
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'save Button
    3. xw.WriteStartDocument()
    4. 'window 1
    5. If CheckBox1.Checked = True Then
    6. xw.WriteStartElement("Window 1")
    7. xw.WriteAttributeString("Show Window", "1")
    8. xw.WriteAttributeString("Size Hight", TextBox1.Text)
    9. xw.WriteAttributeString("Size With", TextBox2.Text)
    10. xw.WriteAttributeString("Position X", TextBox3.Text)
    11. xw.WriteAttributeString("Position Y", TextBox4.Text)
    12. If CheckBox44.Checked = True Then
    13. CheckBox45.Checked = False
    14. xw.WriteAttributeString("Path", TextBox5.Text)
    15. Else
    16. xw.WriteAttributeString("Path", "")
    17. End If
    18. If CheckBox45.Checked = True Then
    19. CheckBox44.Checked = False
    20. xw.WriteAttributeString("URL", TextBox5.Text)
    21. Else
    22. xw.WriteAttributeString("URL", "")
    23. End If
    24. Else
    25. xw.WriteStartElement("Window 1")
    26. xw.WriteAttributeString("Show Window", "0")
    27. xw.WriteAttributeString("Size Hight", "")
    28. xw.WriteAttributeString("Size With", "")
    29. xw.WriteAttributeString("Position X", "")
    30. xw.WriteAttributeString("Position Y", "")
    31. xw.WriteAttributeString("Path", "")
    32. xw.WriteAttributeString("URL", "")
    33. End If
    34. xw.WriteEndElement()
    35. 'weiter bis block 16
    36. end sub


    grüße

    Sonaca schrieb:

    16 blöcke
    Fang an mit dem Code zu spielen.
    Selbstverständlich kannst Du eine Klasse machen, die die Einzeldaten halten, dann machst Du eine Oberklasse, die die 16 Blöcke hält. Die serialisierst Du.
    Feddich.
    Wenn Du Dich um alles selbst kümmern willst, ist die Gefahr von Fehlern viel zu groß.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Sow, mein vorheriges Problem hat sich erledigt, nun kommt folgendes ....

    Quellcode

    1. Ein Ausnahmefehler des Typs "System.InvalidOperationException" ist in System.Xml.dll aufgetreten.
    2. Zusätzliche Informationen: Token StartElement im Status Epilog würde in einem ungültigen XML-Dokument resultieren.


    Source

    Spoiler anzeigen

    VB.NET-Quellcode

    1. #Region "Window 1 - 4 XML"
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'save Button
    3. Dim xw As XmlWriter = New XmlTextWriter(Application.StartupPath & cs, New UnicodeEncoding) 'in XML Schreiben
    4. xw.WriteStartDocument()
    5. 'window 1
    6. If CheckBox1.Checked = True Then
    7. xw.WriteStartElement("Second Settings")
    8. xw.WriteStartElement("Window 1")
    9. xw.WriteAttributeString("Show Window", "1")
    10. xw.WriteAttributeString("Size Hight", TextBox1.Text)
    11. xw.WriteAttributeString("Size With", TextBox2.Text)
    12. xw.WriteAttributeString("Position X", TextBox3.Text)
    13. xw.WriteAttributeString("Position Y", TextBox4.Text)
    14. If CheckBox44.Checked = True Then
    15. CheckBox45.Checked = False
    16. xw.WriteAttributeString("Path", TextBox5.Text)
    17. Else
    18. xw.WriteAttributeString("Path", "")
    19. End If
    20. If CheckBox45.Checked = True Then
    21. CheckBox44.Checked = False
    22. xw.WriteAttributeString("URL", TextBox5.Text)
    23. Else
    24. xw.WriteAttributeString("URL", "")
    25. End If
    26. Else
    27. xw.WriteStartElement("Window 1")
    28. xw.WriteAttributeString("Show Window", "0")
    29. xw.WriteAttributeString("Size Hight", "")
    30. xw.WriteAttributeString("Size With", "")
    31. xw.WriteAttributeString("Position X", "")
    32. xw.WriteAttributeString("Position Y", "")
    33. xw.WriteAttributeString("Path", "")
    34. xw.WriteAttributeString("URL", "")
    35. End If
    36. xw.WriteEndElement()
    37. 'window 2
    38. If CheckBox2.Checked = True Then
    39. xw.WriteStartElement("Window 2")
    40. xw.WriteAttributeString("Show Window", "1")
    41. xw.WriteAttributeString("Size Hight", TextBox7.Text)
    42. xw.WriteAttributeString("Size With", TextBox8.Text)
    43. xw.WriteAttributeString("Position X", TextBox10.Text)
    44. xw.WriteAttributeString("Position Y", TextBox9.Text)
    45. If CheckBox42.Checked = True Then
    46. CheckBox43.Checked = False
    47. xw.WriteAttributeString("Path", TextBox6.Text)
    48. Else
    49. xw.WriteAttributeString("Path", "")
    50. End If
    51. If CheckBox43.Checked = True Then
    52. CheckBox42.Checked = False
    53. xw.WriteAttributeString("URL", TextBox6.Text)
    54. Else
    55. xw.WriteAttributeString("URL", "")
    56. End If
    57. xw.WriteEndElement()
    58. Else
    59. xw.WriteStartElement("Window 2") 'Fehlerzeile
    60. xw.WriteAttributeString("Show Window", "0")
    61. xw.WriteAttributeString("Size Hight", "")
    62. xw.WriteAttributeString("Size With", "")
    63. xw.WriteAttributeString("Position X", "")
    64. xw.WriteAttributeString("Position Y", "")
    65. xw.WriteAttributeString("Path", "")
    66. xw.WriteAttributeString("URL", "")
    67. End If
    68. xw.WriteEndElement()

    Sonaca schrieb:

    folgendes
    Du solltest mal das Verfahren wechseln.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Sonaca schrieb:

    nicht mal die hälfte verstehe
    Dann solltest Du danach fragen und das Kleinkram-Einzel-gewurstel, von dem Du offensichtlich ebensowenig verstehst, sein lassen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!