(geschachtelte) XML Auslesen

  • VB.NET

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

    (geschachtelte) XML Auslesen

    Hey,

    ich habe folgendes Problem. Ich möchte in einer XML-Datei der Form

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <!--XML Database.-->
    3. <Data>
    4. <Müller>
    5. <Login>09:18:26</Login>
    6. <Logout>09:18:26</Logout>
    7. <Login>09:18:27</Login>
    8. <Logout>09:18:28</Logout>
    9. </Müller>
    10. <Schmitt>
    11. <Login>09:18:26</Login>
    12. <Logout>09:18:26</Logout>
    13. <Login>09:18:27</Login>
    14. <Logout>09:18:28</Logout>
    15. </Schmitt>
    16. </Data>


    die Zeit für die verschiedenen Personen zwischen Login und Logout auswerten.
    Ich schaffe es nur irgendwie nicht, die Personen sinnvoll zu unterscheiden, sprich mein Code sucht nur nach sämtlichen "Logins" oder "Logouts", ignoriert dabei natürlich die verschiedenen Personen. Gibt es eine einfache Methode, erst den Namen abzufragen und dann die untergeordneten Zeiten?!?!? Irgendwie eine Art geschachtelte If Abfrage??? Ich bekomme das nicht hin....

    Hier der Code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    3. Dim array(5000) As String
    4. Dim array2(5000) As String
    5. Dim n As Integer = 1
    6. Dim document As XmlReader = New XmlTextReader("P:\Test.xml")
    7. While (document.Read())
    8. Dim type = document.NodeType
    9. If (type = XmlNodeType.Element) Then
    10. If (document.Name = "Login") Then
    11. xmlMyname.Visible = True
    12. xmlMyname.Text = document.ReadInnerXml.ToString()
    13. Dim test2 As String = document.ReadInnerXml.ToString()
    14. Dim test As String = test2
    15. array(n) = xmlMyname.Text
    16. MsgBox(array(n))
    17. n = n + 1
    18. End If
    19. If (document.Name = "Müller") Then
    20. MsgBox("Müller")
    21. End If
    22. End If
    23. End While
    24. End Sub
    25. End Class



    Danke schon mal!

    Liebe Grüße
    Hallo @Donni,

    Ich weiß nicht ob es Die beste Lösung ist aber ich würde mir 2 Strings erstellen
    In den ersten schreibe ich alles was Zwischen <Müller> und </Müller> steht per RegEx und im 2 alles Zwischen <Schmitt> und </Schmitt>
    anschließend würde ich <Login> durch "" Replacen und </Login> durch VBNewline

    (Ist aber nur Praktikabel wenn es nicht mehr als die 2 Benutzer gibt :whistling: und sicherlich auch anders umsetzbar)

    LG Ruerte
    Unfortunately, this Signature is not available in Germany because it may contain music for which GEMA
    has not granted the respective music rights. Sorry about that.

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

    @Donni,

    Würde der user zb durch <User=Müller> und </User=Müller> oder eine andere Art die Eindeutig ist definiert, währe es wesentlich einfacher.
    Ich sehe das Problem aktuell darin herauszufinden bis Wohin ein user geht. Du musst eigentlich alle User Def. da es wie erwähnt kein Kennzeichen wie zb. User= gibt

    LG Ruerte
    Unfortunately, this Signature is not available in Germany because it may contain music for which GEMA
    has not granted the respective music rights. Sorry about that.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Ruerte“ ()

    @Ruerte Ja, da hast du Recht, das wäre dann wohl wesentlich einfacher :whistling:
    Aber ich habe leider keinen Einfluss auf das Erstellen der Datei... Ich hab es jetzt anders gelöst:

    VB.NET-Quellcode

    1. Sub Main()
    2. Try
    3. Dim m_xmld As XmlDocument
    4. Dim m_nodelist As XmlNodeList
    5. Dim m_node As XmlNode
    6. m_xmld = New XmlDocument()
    7. 'Load the Xml file
    8. m_xmld.Load("P:\XML\Test2.xml")
    9. 'Get the list of name nodes
    10. m_nodelist = m_xmld.SelectNodes("/Data/Elena")
    11. For Each m_node In m_nodelist
    12. Dim Login = m_node.ChildNodes.Item(0).InnerText
    13. Dim Logout = m_node.ChildNodes.Item(1).InnerText
    14. Console.Write(Login & Logout)
    15. Console.Write(vbCrLf)
    16. Next
    17. Catch errorVariable As Exception
    18. 'Error trapping
    19. Console.Write(errorVariable.ToString())
    20. End Try
    21. End Sub



    Ich schau jetzt mal, wie weit ich damit komme!