XML in Objekt verschachtelt einlesen und nachtraglich im Objekt anpassungen durchführen

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    XML in Objekt verschachtelt einlesen und nachtraglich im Objekt anpassungen durchführen

    Hallo Zusammen,

    Ich habe ein Objektmodel Verschachtelt aus 5 Klassen (Schule, Kassen, Schüler , Zeugniss , Noten)
    Die XML habe ich über das Objektmodell serialisiert.

    Ich habe dieses jetzt wieder deserialisiert ins Objektmodel.
    Möchte jetzt nur einen Schüler oder Noten hinzufügen , ändern oder entfernen und wieder als neue XML serialisieren ?

    Wie läuft man om Objektmodel durch



    Danke
    Hallo,

    Habe das ObjektModell etwas gekürzt und XML Datei angepasst.
    Hoffe jetzt wird es etwas verständlicher.

    XML-Datei Inhalt:

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <clsSchule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    3. <ID>1</ID>
    4. <Name>Name1</Name>
    5. <Adresse>Adresse1</Adresse>
    6. <Klasse>
    7. <clsKlasse>
    8. <ID>1</ID>
    9. <Name>Name1</Name>
    10. <Adresse>Adresse1</Adresse>
    11. <Schüler>
    12. <clsSchüler>
    13. <ID>1</ID>
    14. <Jahrgang>2024/2025</Jahrgang>
    15. <Datum>10.10.2023</Datum>
    16. <Zeugniss>
    17. <clsZeugniss>
    18. <ID>1</ID>
    19. <Semester>2023/2024</Semester>
    20. <Datum>10.10.2022</Datum>
    21. <Noten>
    22. <clsNoten>
    23. <ID>1</ID>
    24. <Fach>Fach1</Fach>
    25. <Note>Note1</Note>
    26. </clsNoten>
    27. <clsNoten>
    28. <ID>2</ID>
    29. <Fach>Fach2</Fach>
    30. <Note>Note2</Note>
    31. </clsNoten>
    32. </Noten>
    33. </clsZeugniss>
    34. <clsZeugniss>
    35. <ID>1</ID>
    36. <Semester>2024/2025</Semester>
    37. <Datum>10.10.2023</Datum>
    38. <Noten>
    39. <clsNoten>
    40. <ID>1</ID>
    41. <Fach>Fach1</Fach>
    42. <Note>Note1</Note>
    43. </clsNoten>
    44. <clsNoten>
    45. <ID>2</ID>
    46. <Fach>Fach2</Fach>
    47. <Note>Note2</Note>
    48. </clsNoten>
    49. </Noten>
    50. </clsZeugniss>
    51. </Zeugniss>
    52. </clsSchüler>
    53. </Schüler>
    54. </clsKlasse>
    55. </Klasse>
    56. </clsSchule>


    ObjektModel:

    VB.NET-Quellcode

    1. Public Class clsSchule
    2. Inherits clsKlasse
    3. Private _ID As Integer
    4. Private _Name As String
    5. Private _Adresse As String
    6. Private _Klasse As New List(Of clsKlasse)
    7. Public Property ID As Integer
    8. Get
    9. Return _ID
    10. End Get
    11. Set(value As Integer)
    12. _ID = value
    13. End Set
    14. End Property
    15. Public Property Name As String
    16. Get
    17. Return _Name
    18. End Get
    19. Set(value As String)
    20. _Name = value
    21. End Set
    22. End Property
    23. Public Property Adresse As String
    24. Get
    25. Return _Adresse
    26. End Get
    27. Set(value As String)
    28. _Adresse = value
    29. End Set
    30. End Property
    31. Public Property Klasse As List(Of clsKlasse)
    32. Get
    33. Return _Klasse
    34. End Get
    35. Set(value As List(Of clsKlasse))
    36. _Klasse = value
    37. End Set
    38. End Property
    39. Public Sub SchuleSave()
    40. Dim writer As New System.Xml.Serialization.XmlSerializer(GetType(clsSchule))
    41. Dim file As New System.IO.StreamWriter(c:\temp\SchuleBelegung.xml)
    42. writer.Serialize(file, mobjSchule)
    43. file.Close()
    44. End Sub
    45. Public Sub SchuleLoad()
    46. Dim reader As New System.Xml.Serialization.XmlSerializer(GetType(clsSchule))
    47. Dim file As New System.IO.StreamReader(c:\temp\SchuleBelegung.xml)
    48. mobjSchule = New clsSchule
    49. mobjSchule = (CType(reader.Deserialize(file), clsSchule))
    50. End Sub
    51. End Class
    52. Public Class clsKlasse
    53. Inherits clsSchüler
    54. Private _ID As Integer
    55. Private _Name As String
    56. Private _Adresse As String
    57. Private _Schüler As New List(Of clsSchüler)
    58. Public Property ID As Integer
    59. Get
    60. Return _ID
    61. End Get
    62. Set(value As Integer)
    63. _ID = value
    64. End Set
    65. End Property
    66. Public Property Name As String
    67. Get
    68. Return _Name
    69. End Get
    70. Set(value As String)
    71. _Name = value
    72. End Set
    73. End Property
    74. Public Property Adresse As String
    75. Get
    76. Return _Adresse
    77. End Get
    78. Set(value As String)
    79. _Adresse = value
    80. End Set
    81. End Property
    82. Public Property Schüler As List(Of clsSchüler)
    83. Get
    84. Return _Schüler
    85. End Get
    86. Set(value As List(Of clsSchüler))
    87. _Schüler = value
    88. End Set
    89. End Property
    90. End Class
    91. Public Class clsSchüler
    92. Inherits clsZeugniss
    93. Private _ID As Integer
    94. Private _Jahrgang As String
    95. Private _Datum As Date
    96. Private _Zeugniss As New List(Of clsZeugniss)
    97. Public Property ID As Integer
    98. Get
    99. Return _ID
    100. End Get
    101. Set(value As Integer)
    102. _ID = value
    103. End Set
    104. End Property
    105. Public Property Jahrgang As String
    106. Get
    107. Return _Jahrgang
    108. End Get
    109. Set(value As String)
    110. _Jahrgang = value
    111. End Set
    112. End Property
    113. Public Property Datum As Date
    114. Get
    115. Return _Datum
    116. End Get
    117. Set(value As String)
    118. _Datum = value
    119. End Set
    120. End Property
    121. Public Property Zeugniss As List(Of clsZeugniss)
    122. Get
    123. Return _Zeugniss
    124. End Get
    125. Set(value As List(Of clsZeugniss))
    126. _Zeugniss = value
    127. End Set
    128. End Property
    129. End Class
    130. Public Class clsZeugniss
    131. Inherits clsNoten
    132. Private _ID As Integer
    133. Private _Semester As Integer
    134. Private _Datum As Date
    135. Private _Noten As New List(Of clsNoten)
    136. Public Property ID As Integer
    137. Get
    138. Return _ID
    139. End Get
    140. Set(value As Integer)
    141. _ID = value
    142. End Set
    143. End Property
    144. Public Property Semester As Integer
    145. Get
    146. Return _Semester
    147. End Get
    148. Set(value As Integer)
    149. _Semester = value
    150. End Set
    151. End Property
    152. Public Property Datum As Date
    153. Get
    154. Return _Datum
    155. End Get
    156. Set(value As String)
    157. _Datum = value
    158. End Set
    159. End Property
    160. Public Property Noten As List(Of clsNoten)
    161. Get
    162. Return _Noten
    163. End Get
    164. Set(value As List(Of clsNoten))
    165. _Noten = value
    166. End Set
    167. End Property
    168. End Class
    169. Public Class clsNoten
    170. Private _ID As Integer
    171. Private _Fach As String
    172. Private _Note As Integer
    173. Public Property ID As Integer
    174. Get
    175. Return _ID
    176. End Get
    177. Set(value As Integer)
    178. _ID = value
    179. End Set
    180. End Property
    181. Public Property Fach As String
    182. Get
    183. Return _Fach
    184. End Get
    185. Set(value As String)
    186. _Fach = value
    187. End Set
    188. End Property
    189. Public Property Note As Integer
    190. Get
    191. Return _Note
    192. End Get
    193. Set(value As Integer)
    194. _Note = value
    195. End Set
    196. End Property
    197. End Class

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

    @Entwickler Es gibt diverse Code-Tags im Forum-Editor, nutze sie.

    Editiere Deinen Post:
    Code markieren und den entsprechend Tag-Button drücken.
    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!
    Dein Code kompiliert nicht. Kannst du nochmal etwas genauer sagen was du willst?

    Ich denke du meinst sowas?

    VB.NET-Quellcode

    1. Dim s = s.SchuleLoad ' Lade Schule mit Inhalt
    2. s.Klassen.Last.Schüler.Last.Zeugnisse.Last.Noten.Last(Function(x) x.ID = 5) = 6 'Gib dem letzten Schüler der letzten Klasse auf dem letzten Zeugnis in der letzten Note mit ID 5 eine 6
    3. s.Klassen.Last.Schüler.Add(New clsSchüler() With {.Name = "Joseph"}) 'Erstelle Schüler Joseph in der letzten Klasse
    4. s.SchuleSave ' Speicher die Änderungen

    Ich denke es wäre besser deine SchuleLoad wäre eine Function die eine geladene Schule zurückgibt. Dort ist auch der Fehler mobjschule ist nicht definiert worden. Und das dadrin zu definieren wäre fürs Laden recht doof, weils ja verworfen wird. Alternativ müsstest von außen ein Objekt reinreichen oder die Schule Class als Art Singleton handhaben.

    Ich glaube du weißt nicht was Inherits heißt. Ein Schüler erbt doch nicht von Zeugnis. Vielleicht erbt der von Mensch und selbst das wär schon an den Haaren herbeigezogen ;).

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Hallo Haudruferzappeltnoch,

    Danke für Info, dass war es was ich gesucht habe!!

    ja habe ich mir etwas aus den Haaren gezogen ;)
    Beispiel Quellcode hatte ich jetzt auch nur so schnell zusammenkopiert.
    Die Klassen liegen eigentlich verteilt in .dll's und haben nichts mit Schule zu tun.

    Mfg