Frage zu XML Writer

  • VB.NET

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

    Frage zu XML Writer

    Hallo alle zusammen,

    ich habe folgende Frage zu einem XML Writer wo ich nicht ganz weiterkomme.
    Ich hoffe das es überhaupt möglich ist.

    Ich habe eine TXT Datei mit mehreren Zeilen Inhalt. (BSP 10 Zeilen = 10 verschiedene Datensätze)
    Nun möchte ich diese in jeweils getrennte XML Dateien schreiben.
    Der XML Writer ist soweit fertig und Funktioniert auch, nur leider schreibt er mir alle 10 Datensätze ich einer XML untereinander.
    So kann ich diese aber leider nicht weiterverarbeiten.
    Kann mir da einer helfen?

    Visual Basic-Quellcode

    1. Imports System.Xml
    2. Imports System.Text
    3. Public Class Form1
    4. Dim file As String = ""
    5. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    6. ' Read the text document and put in in an array
    7. Dim myText As String = My.Computer.FileSystem.ReadAllText(file) ', System.Text.Encoding.Default).Split(vbCrLf)
    8. Dim ary As String() = myText.Split(vbCrLf)
    9. ' Define the xml text writer
    10. Dim writer As New XmlTextWriter(file & ".xml", Encoding.Unicode)
    11. ' Use indenting
    12. writer.Formatting = Formatting.Indented
    13. writer.Indentation = 4
    14. ' Start the document. This is the header stating this is xml 1.0.
    15. writer.WriteStartDocument(True)
    16. ' Write the main element
    17. writer.WriteStartElement("OpenShipments")
    18. writer.WriteAttributeString("xmlns", "x-schema:OpenShipments.xdr")
    19. writer.WriteStartElement("OpenShipment")
    20. writer.WriteAttributeString("ShipmentOption", "")
    21. writer.WriteAttributeString("ProcessStatus", "")
    22. ' Now write the data for each element in the array
    23. For x As Integer = 0 To ary.Length - 2
    24. WriteRSData(writer, ary(x))
    25. Next
    26. ' Close the Contacts element
    27. writer.WriteEndElement()
    28. writer.WriteEndElement()
    29. ' Close the document
    30. writer.WriteEndDocument()
    31. ' Close the writer
    32. writer.Close()
    33. TextBox2.Text = "Datei erfolgreich konvertiert in " & (file) & ".xml"
    34. 'MsgBox("Fertig")
    35. Button2.Visible = True
    36. Button1.Visible = False
    37. End Sub
    38. Private Sub WriteRSData(ByVal wr As XmlWriter, ByVal str As String)
    39. ' Break string into attributes
    40. Dim ary As String() = str.Split(vbTab)
    41. ' Write element name
    42. wr.WriteStartElement("ShipFrom")
    43. wr.WriteStartElement("CompanyOrName")
    44. wr.WriteString(ary(1))
    45. wr.WriteEndElement()
    46. wr.WriteStartElement("Attention")
    47. wr.WriteString(ary(2))
    48. wr.WriteEndElement()
    49. wr.WriteStartElement("Address1")
    50. wr.WriteString(ary(3))
    51. wr.WriteEndElement()
    52. 'wr.WriteStartElement("Address2")
    53. 'wr.WriteString(ary(?))
    54. 'wr.WriteEndElement()
    55. wr.WriteStartElement("Telephone")
    56. wr.WriteString(ary(16))
    57. wr.WriteEndElement()
    58. wr.WriteStartElement("PostalCode")
    59. wr.WriteString(ary(4))
    60. wr.WriteEndElement()
    61. wr.WriteStartElement("CityOrTown")
    62. wr.WriteString(ary(5))
    63. wr.WriteEndElement()
    64. wr.WriteStartElement("CountryTerritory")
    65. wr.WriteString(ary(6))
    66. wr.WriteEndElement()
    67. wr.WriteEndElement()
    68. ' Write element name
    69. wr.WriteStartElement("ShipTo")
    70. wr.WriteStartElement("CompanyOrName")
    71. wr.WriteString(ary(1))
    72. wr.WriteEndElement()
    73. wr.WriteStartElement("Attention")
    74. wr.WriteString(ary(2))
    75. wr.WriteEndElement()
    76. wr.WriteStartElement("Address1")
    77. wr.WriteString(ary(3))
    78. wr.WriteEndElement()
    79. wr.WriteStartElement("Address2")
    80. wr.WriteString(ary(4))
    81. wr.WriteEndElement()
    82. wr.WriteStartElement("Address3")
    83. wr.WriteString(ary(5))
    84. wr.WriteEndElement()
    85. wr.WriteStartElement("CityOrTown")
    86. wr.WriteString(ary(7))
    87. wr.WriteEndElement()
    88. wr.WriteStartElement("PostalCode")
    89. wr.WriteString(ary(6))
    90. wr.WriteEndElement()
    91. wr.WriteStartElement("CountryTerritory")
    92. wr.WriteString(ary(8))
    93. wr.WriteEndElement()
    94. wr.WriteEndElement()
    95. 'ShipmentInformation
    96. wr.WriteStartElement("ShipmentInformation")
    97. wr.WriteStartElement("ShipperNumber")
    98. wr.WriteString(ary(0))
    99. wr.WriteEndElement()
    100. wr.WriteStartElement("ServiceType")
    101. wr.WriteString(ary(9))
    102. 'wr.WriteString("RS")
    103. wr.WriteEndElement()
    104. 'wr.WriteStartElement("BillingOption")
    105. 'wr.WriteString("PP")
    106. 'wr.WriteEndElement()
    107. wr.WriteStartElement("DescriptionOfGoods")
    108. wr.WriteString(ary(7))
    109. wr.WriteEndElement()
    110. wr.WriteStartElement("Reference1")
    111. wr.WriteString(ary(11))
    112. wr.WriteEndElement()
    113. wr.WriteStartElement("Reference2")
    114. wr.WriteString(ary(12))
    115. wr.WriteEndElement()
    116. wr.WriteStartElement("Reference3")
    117. wr.WriteString(ary(15))
    118. wr.WriteEndElement()
    119. wr.WriteEndElement()
    120. 'FreightShipmentInformation
    121. wr.WriteStartElement("FreightShipmentInformation")
    122. wr.WriteStartElement("PickupDate")
    123. wr.WriteString(ary(13))
    124. wr.WriteEndElement()
    125. wr.WriteEndElement()
    126. End Sub
    Willkommen im Forum. :thumbup:

    Fischermeister schrieb:

    ich einer XML
    Dann sollten in Deinem Code auch mehrere Dateien generiert werden.
    1. machma im Thread-Titel aus VB6 ==> VB.NET.
    2. Pack das Schreiben einer Datei in eine separate Routine, der Du den Dateinamen und den Inhalt übergibst.
    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!
    ich würde von so low-level-Werkzeugen wie XmlWriter sehr abraten - es gibt wesentlich bessere Instrumente, um Xml zu verarbeiten - etwa XmlDocument oder noch besser XDocument.

    Aber man sollte vlt auch den Zweck der ganzen Veranstaltung in den Blick nehmen - sieht mir malwieder nach einer Datenverarbeitung mit ungeeigneten Mitteln aus.
    Also wenn da für jeden Datensatz eine eigene Datei angelegt werden soll, ist da imo was faul.

    Ach, und nochwas (nochmal zurück zum XmlWriter): Ein XmlWriter writet eine Datei, nicht mehr.