XML Zeile n mal Schreiben

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von cuese3.

    XML Zeile n mal Schreiben

    Hallo ,
    ich wollte mal Fragen ob es irgendwie geht eine Zeile n mal (vom Counter abhängig) in ein Xml Dokument zu schreiben,
    dabei soll immer ein Wert geändert werden.

    Zum Bespiel folgende Zeile:
    <zahl>x<zahl>

    Wenn z.B. 3 mal ins Dokument geschrieben:
    <zahl>1<zahl>
    <zahl>2<zahl>
    <zahl>3<zahl>

    Wie könnte man das am besten realisieren?
    Da fehlen dir eindeutig Grundlagen, das hier wäre ein Paradebeispiel für die For-Schleife.
    Les dir z. B. mal das hier durch: openbook.galileocomputing.de/e…eg_vb_2010_kap_02_001.htm EDIT: Dann lieber doch nicht, s. Post unten von FloFuchs


    Mfg, jmb.96
    "People assume that time is a strict progression of cause to effect, but actually, from a non-linear, non-subjective viewpoint, it's more like a big ball of wibbly wobbly, ...timey wimey ...stuff."

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jmb.96“ ()

    Zunächst einmal solltest Du einen End-Tag verwenden:

    XML-Quellcode

    1. </zahl>
    Wie sieht denn der Rest Deines XML-Dokuments aus?
    Setze Dich ggf. mit den Klassen XmlWriter und XmlTextWriter auseinander.
    Ich empfehle Dir, Dich gleich mit einer richtigen Lösung zu befassen, Zeugs zu frickeln hilft nur so lange, bis es das nächste Mal knallt.
    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!
    Das mit dem Xml Schreiben wäre geschaft.
    War eigentlich nicht so schwer :) Danke euch beiden .
    Nur wie kreig ich am besten meinen counter in die For Schleife?

    Hier der Code :

    VB.NET-Quellcode

    1. Dim XmlWrt As XmlWriter = XmlWriter.Create("Test.xml")
    2. Dim value0 = 0
    3. Dim Value1 = 1
    4. For Each counter As Integer In
    5. value0 = value0 + Value1
    6. With XmlWrt
    7. .WriteStartDocument()
    8. .WriteStartElement("backgroundlist")
    9. .WriteStartElement("Background")
    10. .WriteStartElement("FILEPATH")
    11. .WriteString("Images\..." & value0 & ".png")
    12. .WriteEndElement()
    13. .WriteStartElement("PreviewPath")
    14. .WriteString("Images\..." & value0 & ".png")
    15. .WriteEndElement()
    16. .WriteEndElement()
    17. .WriteEndDocument()
    18. .Close()
    19. End With
    20. Next

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „cuese3“ ()

    probiers mal so:

    VB.NET-Quellcode

    1. for i as integer = 1 to 300 'oder bis wohin du willst
    2. 'mach was
    3. 'mach was anderes
    4. .WriteString("Images\..." & i.tostring & ".png")
    5. next i


    ahja noch so als Tip: Wennste immer eins dazu zählen willst:

    VB.NET-Quellcode

    1. i +=1

    und schau dir mal

    VB.NET-Quellcode

    1. System.io.path.combine(...)
    an
    Das klappt nicht so ganz.
    Er schreibt nur die Endzahl in die Xml ,sprich wenn in vb steht 1 To 300 dann steht in der xml ....300.png


    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <backgroundlist>
    3. <Background>
    4. <FILEPATH>.....\300.png</FILEPATH>
    5. <PreviewPath>.....\300.png</PreviewPath>
    6. </Background>
    7. </backgroundlist>


    und er schreibt diese Zeilen nur einmal in die Xml ,obwohl er eigentlich die Zeilen 300 mal ins Dokument schreiben sollte.

    Code sieht so aus:

    VB.NET-Quellcode

    1. Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim counter As _
    3. System.Collections.ObjectModel.ReadOnlyCollection(Of String)
    4. counter = My.Computer.FileSystem.GetFiles("C:\Users\Alexej\Pictures\Desktop Wallpaper")
    5. Dim counter1 = CStr(counter.Count)
    6. MsgBox(CStr(counter.Count))
    7. Dim XmlWrt As XmlWriter = XmlWriter.Create("C:\Users\Alexej\BkgListA.xml")
    8. XmlWrt.WriteStartDocument()
    9. XmlWrt.WriteStartElement("backgroundlist")
    10. For i As Integer = 1 To counter1
    11. With XmlWrt
    12. .WriteStartElement("Background")
    13. .WriteStartElement("FILEPATH")
    14. .WriteString("Images\\Backgrounds\Wallpapers\" & i.ToString & ".png")
    15. .WriteEndElement()
    16. .WriteStartElement("PreviewPath")
    17. .WriteString("Images\\Backgrounds\Wallpapers\" & i.ToString & ".png")
    18. .WriteEndElement()
    19. End With
    20. Next i
    21. XmlWrt.WriteEndElement()
    22. XmlWrt.WriteEndDocument()
    23. XmlWrt.Close()
    24. End Sub
    25. End Class


    Edit : Es klappt ! :thumbsup: Danke ,Danke !
    Habe den Code noch bisschen geändert und dann hats geklappt.

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

    Stell mal Option Strict On ein und du wirst sehen, dass dein Code Q&D (Quick and Dirty) ist.
    - Bei Variablen muss ein Typ angegeben werden, bei Option Strict Off wird dann "einfach" Object angenommen
    - Du kannst nicht bis zu einem String hochzählen, der vorher nichtmal als String sondern als Object (oder eben auch nicht ^^) definiert wurde.
    - mehr sehe ich auf Anhieb nicht, habe es mir aber auch nicht besonders gründlich angeguckt.
    Der Code funktioniert wunderbar,
    aber das fertige Xml Dokument besteht nur aus einer Zeile,
    sprich es wird alles ins Dokument geschreiben nur es wird nicht auf mehrere Zeilen geteilt ,sondern alles in eine geschreiben.
    Wie kann ich das beheben ?
    Macht es überhaupt was aus wenn der ganze text in einer Zeile steht ?
    Ne oder ? Nur von der Struktur ist es besser ?


    Edit : Habs hinbekommen :thumbsup: Danke für die tolle hilfe :thumbup:


    Cod sieht jetzt wie folgt aus:

    VB.NET-Quellcode

    1. Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim counter As _
    3. System.Collections.ObjectModel.ReadOnlyCollection(Of String)
    4. If System.IO.File.Exists("C:\Users\...\abc.xml") Then
    5. FileSystem.Kill("C:\Users\...\abc.xml")
    6. End If
    7. counter = My.Computer.FileSystem.GetFiles("C:\Users\....\")
    8. Dim counter1 As Integer = CStr(counter.Count)
    9. MsgBox(CStr(counter.Count))
    10. Dim settings As XmlWriterSettings = New XmlWriterSettings()
    11. settings.Indent = True
    12. settings.OmitXmlDeclaration = True
    13. settings.NewLineOnAttributes = True
    14. settings.NewLineHandling = NewLineHandling.None
    15. Dim XmlWrt As XmlWriter = XmlWriter.Create("C:\Users\...\abc.xml", settings)
    16. XmlWrt.WriteStartDocument()
    17. XmlWrt.WriteStartElement("backgroundlist")
    18. For i As Integer = 1 To counter1
    19. With XmlWrt
    20. .WriteStartElement("Background")
    21. .WriteStartElement("FILEPATH")
    22. .WriteString("Images\...\" & i.ToString & ".png")
    23. .WriteEndElement()
    24. .WriteStartElement("PreviewPath")
    25. .WriteString("Images\...\" & i.ToString & ".png")
    26. .WriteEndElement()
    27. .WriteEndElement()
    28. End With
    29. Next i
    30. XmlWrt.WriteEndElement()
    31. XmlWrt.WriteEndDocument()
    32. XmlWrt.Close()
    33. End Sub

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „cuese3“ ()