XML Datentabelle mit mehreren Knoten auslesen

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

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Westerwälder.

    XML Datentabelle mit mehreren Knoten auslesen

    Guten Morgen,

    mit dem nachstehenden Code erzeuge ich eine Importdatei für meine Fritz Box (Telefonbuch).

    VB.NET-Quellcode

    1. Public Sub Fritzboxkontakt_Erstellung()
    2. Dim Datei As String = Pfade.System.Pfad & "FBoxKontakt.xml"
    3. If File.Exists(Datei) Then File.Delete(Datei)
    4. Dim Writer As StreamWriter = Nothing
    5. Writer = My.Computer.FileSystem.OpenTextFileWriter(Datei, True)
    6. Dim Zeile As DataRow = Nothing
    7. Dim Nameszeile As String = Nothing
    8. Dim Adresse As String = Nothing
    9. Dim Telefon1 As String = Nothing
    10. Dim Telefon2 As String = Nothing
    11. Dim Mobil1 As String = Nothing
    12. Dim Mobil2 As String = Nothing
    13. Dim SchreibeText As String = Nothing
    14. With Writer
    15. .WriteLine("<?xml version=" & """1.0""" & " encoding=" & """utf-8""" & "?>")
    16. .WriteLine("<phonebooks>")
    17. .WriteLine("<phonebook owner" & "=" & """1""" & " name" & "=" & """TB MBHome""" & ">")
    18. For I As Integer = 0 To Daten.Basis.Kontaktdaten.Rows.Count - 1
    19. Zeile = Daten.Basis.Kontaktdaten(I)
    20. Nameszeile = Nothing
    21. Adresse = Nothing
    22. Telefon1 = Nothing
    23. Telefon2 = Nothing
    24. Mobil1 = Nothing
    25. Mobil2 = Nothing
    26. Nameszeile = Zeile("Kontaktzeile").ToString
    27. Nameszeile = Nameszeile.Replace(",", "")
    28. Nameszeile = Nameszeile.Replace("&", "und")
    29. Telefon1 = Zeile("Telefon1").ToString
    30. Telefon1 = Telefon1.Replace("-", " ")
    31. Telefon2 = Zeile("Telefon2").ToString
    32. Telefon2 = Telefon2.Replace("-", " ")
    33. If Not IsDBNull(Zeile("IK")) Then
    34. If Not CBool(Zeile("IK")) Then
    35. Mobil1 = Zeile("Mobil1").ToString
    36. Mobil1 = Mobil1.Replace("-", " ")
    37. Mobil2 = Zeile("Mobil2").ToString
    38. Mobil2 = Mobil2.Replace("-", " ")
    39. End If
    40. End If
    41. SchreibeText = "<contact><category>0</category><person><realName>" & Nameszeile & "</realName></person><telephony>"
    42. If Not Telefon1 = Nothing Then
    43. SchreibeText = SchreibeText & "<number " & "type" & "=" & """home""" & " prio" & "=" & """0""" & ">" & Telefon1 & "</number>"
    44. End If
    45. If Not Telefon2 = Nothing Then
    46. SchreibeText = SchreibeText & "<number " & "type" & "=" & """home""" & " prio" & "=" & """0""" & ">" & Telefon2 & "</number>"
    47. End If
    48. If Not Mobil1 = Nothing Then
    49. SchreibeText = SchreibeText & "<number " & "type" & "=" & """mobile""" & " prio" & "=" & """0""" & ">" & Mobil1 & "</number>"
    50. End If
    51. If Not Mobil2 = Nothing Then
    52. SchreibeText = SchreibeText & "<number " & "type" & "=" & """mobile""" & " prio" & "=" & """0""" & ">" & Mobil2 & "</number>"
    53. End If
    54. SchreibeText = SchreibeText & "</telephony></contact>"
    55. .WriteLine(SchreibeText)
    56. Next I
    57. .WriteLine("</phonebook>")
    58. .WriteLine("</phonebooks>")
    59. .Close()
    60. End With
    61. MessageBox.Show("Die Kontaktliste für den Import Fritzbox wurde erstellt.", "Kontakt (Telefonie)" & Vorlagen.Copyright_Messagebox,
    62. MessageBoxButtons.OK, MessageBoxIcon.Information)
    63. End Sub

    Der Import funktioniert fehlerfrei.

    Nun möchte ich die Datei an anderer Stelle auslesen und an ein DGV übergeben.

    VB.NET-Quellcode

    1. Dim DateiPfad As String = Pfade.System.Pfad & "FBoxKontakt.xml"
    2. Dim Datenset As New DataSet
    3. Datenset.ReadXml(DateiPfad)
    4. MsgBox(Datenset.Tables.Count.ToString)
    5. Tab_Telefonbuch = New DataTable
    6. With Tab_Telefonbuch
    7. .TableName = "FBoxKontakt"
    8. .Columns.Add("Name", GetType(String))
    9. .Columns.Add("Telefon1", GetType(String))
    10. End With
    11. Dim NeueZeile As DataRow = Nothing
    12. Dim NameZeile As DataRow = Nothing
    13. Dim Tele1 As DataRow = Nothing
    14. For I = 0 To Datenset.Tables(2).Rows.Count - 1
    15. NeueZeile = Tab_Telefonbuch.NewRow
    16. NameZeile = Datenset.Tables(2).Rows(I)
    17. Tele1 = Datenset.Tables(4).Rows(I)
    18. NeueZeile("Name") = NameZeile(0)
    19. NeueZeile("Telefon1") = Tele1(0)
    20. Tab_Telefonbuch.Rows.Add(NeueZeile)
    21. Next I
    22. With DGV_Telefonbuch
    23. .DataSource = Tab_Telefonbuch
    24. End With


    Mein Ansatz die Daten auszulesen ist der falsche.
    Gruß Markus

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