xml Datei - Probleme Datenspeicherung

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

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

    xml Datei - Probleme Datenspeicherung

    Hallo zusammen,

    xml ist für mich Neuland, arbeite sonst mit DB.

    Versuche in einer Schleife Daten in eine neue Datei zu schreiben.
    Möchte gerne den Datensatz später via Datum identifizieren können.

    Erhalte folgende Fehler für das Datum:
    Token StartElement im Status Epilog würde in einem ungültigen XML-Dokument resultieren.

    VB.NET-Quellcode

    1. Private Sub Erstellung()
    2. Dim xmlWriter As Xml.XmlTextWriter = New Xml.XmlTextWriter(Me.Zugriff, System.Text.Encoding.Unicode)
    3. Me.Datum = now.AddDays(-1)
    4. With xmlWriter
    5. .Formatting = Xml.Formatting.Indented
    6. .Indentation = 4
    7. .WriteStartDocument()
    8. End With
    9. For I As Integer = 1 To DMS.Setup.Wettertage ' = 15
    10. Me.Datum = Me.Datum.AddDays(1)
    11. With xmlWriter
    12. .WriteStartElement(Me.Datum.ToShortDateString) ' hier Fehlerzeile
    13. .WriteAttributeString("TTemp", "X")
    14. .WriteAttributeString("HTemp", "X")
    15. .WriteEndElement()
    16. End With
    17. Next
    18. With xmlWriter
    19. .WriteEndDocument()
    20. .Close()
    21. End With
    22. End Sub
    23. End Class
    Gruß Markus

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Westerwälder“ ()

    Mit TextReader/Writer auf Xml loszugehen ist von vielen Möglichkeiten die Umständlichste.

    Worum geht es dir? Willst du Daten speichern, dann lass einen XmlSerialisierer die Xml-Datei lesen/schreiben. Oder besser noch, ein typisiertes Dataset.

    Willst du das Xml-Text-Format kennenlernen, gugge vlt. Tut dazu: Xml-Tutorial
    Kenne mich mit Xml überhaupt nicht aus.
    Denke auch schon über eine Textdatei als Speichermedium nach.

    Es geht mir um ein paar Daten, die ich täglich im Internet auslese und in meine Datenbank schreibe. Im August steht der Sommerurlaub und ich will meinen Sohn bitten, die
    Daten bei sich zu Hause zu ermitteln. Nun will ich ihm nicht das ganze Programm (incl. Datenbank) installieren, sondern nur den erforderlichen Programmcode für die Datenermittlung. Die Daten möchte ich dann in einer Datei abspeichern, welche ich dann nach dem Urlaub in meine Datenbank übernehmen kann.
    Das Tagesdatum hatte ich mir als Knoten vorgestellt.
    Gruß Markus
    du musst erst ein root element anlegen.

    VB.NET-Quellcode

    1. Dim datum As DateTime
    2. Dim settings As New XmlWriterSettings()
    3. settings.Indent = True
    4. Dim XmlWrt As XmlWriter = XmlWriter.Create("test.xml", settings)
    5. datum = Now.AddDays(-1)
    6. For I As Integer = 1 To 15
    7. datum = datum.AddDays(1)
    8. With XmlWrt
    9. .WriteStartDocument()
    10. .WriteStartElement("data")
    11. .WriteStartElement(datum.ToShortDateString)
    12. .WriteAttributeString("TTemp", "x")
    13. .WriteAttributeString("HTemp", "x")
    14. .WriteEndElement()
    15. End With
    16. Next
    17. XmlWrt.WriteEndDocument()
    18. XmlWrt.Close()


    aber beachte Knotennamen =

    * Names can contain letters, numbers, and other characters
    * Names cannot start with a number or punctuation character
    * Names cannot start with the letters xml (or XML, or Xml, etc)
    * Names cannot contain spaces

    Hier könnte meine Signatur stehen.
    Hallo nochmals,

    habe mich mit Materie etwas beschäftigt. Komme aber nicht wirklich weiter.
    Das Beispiel von mox habe ich getestet. Lade ich dieses Xml-Datei in ein Dataset, erhalte 15 Tabellen (ist nicht wirklich das was ich möchte).

    Eigentlich stelle ich mir das so vor (weis nicht ob es realisierbar ist)

    In der Xml-Datei sollten mehrere Knoten verschiedener Formatierungen enthalten sein (ähnlich Tabellen einer DB)

    z.Bsp. Knoten: Wetterdaten
    mit den Untereinträgen:
    - Datum
    - Wetteraussichten
    - Höchsttemperatur
    - usw.
    Anhand des Datum sollte man diese Einträge auslesen können.

    Weiteren Knoten: Lottozahlen
    - Datum
    - Gewinnzahlen 1 - 6
    - Super 6
    - usw.
    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Westerwälder“ ()

    ich habe aber nix von datasets gesagt, mein beispiel macht doch das was du brauchst. wenn du untereinträge willst nimm statt .WriteAttributeString .WriteString
    und mach vor dem datum ein wort so kannst du das datum als knoten benutzen.
    Hier könnte meine Signatur stehen.
    Hallo mox,
    wollte dich auf keinen Fall kritisieren oder sowas, sorry.
    Danke für deine Antwort.

    Habe das ein wenig umgestellt:

    VB.NET-Quellcode

    1. Private Sub Erstellung()
    2. Dim Settings As New XmlWriterSettings
    3. Settings.Indent = True
    4. Dim xmlWrt As Xml.XmlWriter = Xml.XmlWriter.Create(Me.Zugriff, Settings)
    5. Datum = Now.AddDays(-1)
    6. xmlWrt.WriteStartDocument()
    7. xmlWrt.WriteStartElement("Wetter")
    8. For I As Integer = 1 To 15
    9. datum = datum.AddDays(1)
    10. With xmlWrt
    11. .WriteStartElement("D" & Datum.ToShortDateString)
    12. .WriteString("TTemp")
    13. .WriteString("HTemp")
    14. .WriteEndElement()
    15. End With
    16. Next
    17. xmlWrt.WriteEndDocument()
    18. xmlWrt.Close()
    19. End Sub


    Kommt nun dieses bei heraus:
    <?xml version="1.0" encoding="utf-8"?>
    <Wetter>
    <D23.05.2016>TTempHTemp</D23.05.2016>
    <D24.05.2016>TTempHTemp</D24.05.2016>
    <D25.05.2016>TTempHTemp</D25.05.2016>
    <D26.05.2016>TTempHTemp</D26.05.2016>
    <D27.05.2016>TTempHTemp</D27.05.2016>
    <D28.05.2016>TTempHTemp</D28.05.2016>
    <D29.05.2016>TTempHTemp</D29.05.2016>
    <D30.05.2016>TTempHTemp</D30.05.2016>
    <D31.05.2016>TTempHTemp</D31.05.2016>
    <D01.06.2016>TTempHTemp</D01.06.2016>
    <D02.06.2016>TTempHTemp</D02.06.2016>
    <D03.06.2016>TTempHTemp</D03.06.2016>
    <D04.06.2016>TTempHTemp</D04.06.2016>
    <D05.06.2016>TTempHTemp</D05.06.2016>
    <D06.06.2016>TTempHTemp</D06.06.2016>
    </Wetter>
    Wie kann ich nun den Temperaturen einen Wert zuweisen. WriteString hat keinen value oder sowas.
    Gruß Markus