Verschiden XML Elemente auslesen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von AntiMatterQ.

    Verschiden XML Elemente auslesen

    Guten Abend bzw. Nacht

    Neue XML-Datei = Neues Problem

    Da ich mich nicht so auskenne mit XML-Datei, sie aber mal ausprobieren möchte, habe ich halt ein Programm geschrieben.
    Hat auch alles Funktioniert, bis zum lesen der XML-Datei.

    XML-Datei:

    XML-Quellcode

    1. <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
    2. <Games>
    3. <Game_1>
    4. <Name>Game</Name>
    5. <Link>C:\Program Files (x86)</Link>
    6. </Game_1>
    7. <Game_2>
    8. <Name>Game2</Name>
    9. <Link>C:\Program Files (x86)\a</Link>
    10. </Game_2>
    11. </Games>


    Ich möchte jetzt in einer Treeview es so haben:
    +Game
    |
    >>C:\Pro....

    Bei mir ist es aber immer:
    Game
    C:\Prog
    Game2
    C:\Prog...\a

    Bitte um Hilfe !

    Vielen Dank schonmal und

    Schönen Grüß
    Tim bzw. AntiMatterQ
    Keyboard nicht gefunden, bitte drücken sie ENTER

    zunächstmal ist das Datenmodell falsch.
    Game1 und Game2 sind dieselbe Entität, nämlich "Game", und daher müssen sie auch so getaggt sein:

    XML-Quellcode

    1. <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
    2. <Games>
    3. <Game>
    4. <Name>Game1</Name>
    5. <Link>C:\Program Files (x86)</Link>
    6. </Game>
    7. <Game>
    8. <Name>Game2</Name>
    9. <Link>C:\Program Files (x86)\a</Link>
    10. </Game>
    11. </Games>

    Aber wie stellst du dir die weitere Hilfe vor?
    Soll ich dir jetzt die Methode schreiben, wie du einen Treeview damit befüllen kannst?

    ich verstehe ja nichtmal, was an deiner bisherigen Darstellung falsch ist.
    Also:

    XML-Quellcode

    1. <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
    2. <Games>
    3. <Game>
    4. <Name>Game1</Name>
    5. <Link>C:\Program Files (x86)</Link>
    6. </Game>
    7. <Game>
    8. <Name>Game2</Name>
    9. <Link>C:\Program Files (x86)\a</Link>
    10. </Game>
    11. </Games>

    ^ Hattest du Recht, habe mich verschrieben.

    -> Eine Treeview ist ja:
    +Wert
    und wenn man auf das Plus klickt:
    -Wert
    ->Wert1
    ->Wert2 usw.

    wenn ich aus der XML auslese kommt bei mir:
    -Name
    ->Game1
    -Link
    ->C:\...

    Ich möchte es aber so haben:
    -Game1
    ->C:\..

    ------------------------------------------------------------------------------
    Eine Methode währe schon nett ^^

    MFG AntiMatterQ bzw. Tim
    Keyboard nicht gefunden, bitte drücken sie ENTER

    AntiMatterQ schrieb:

    wenn ich aus der XML auslese kommt bei mir:

    Mit welchem Code?
    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!
    Hier ist der Code:

    VB.NET-Quellcode

    1. If File.Exists(XMLDateiPfad) Then
    2. XDocument.Load(XMLDateiPfad)
    3. Try
    4. Dim strNameNode As String
    5. Dim strTextNode As String
    6. Dim i As Integer
    7. Open()
    8. Dim xDoc As XDocument = XDocument.Load(XMLDateiPfad)
    9. Dim xEl As String = "Game_" & i.ToString
    10. Dim objXMLReader As Xml.XmlReader
    11. Dim XMLSettings As New Xml.XmlReaderSettings
    12. With XMLSettings
    13. .IgnoreWhitespace = True 'event. vorhandenes Leerzeichen ignorieren
    14. End With
    15. Try
    16. objXMLReader = Xml.XmlReader.Create(XMLDateiPfad)
    17. While objXMLReader.Read()
    18. Select Case objXMLReader.NodeType
    19. ' do nothing
    20. Case Xml.XmlNodeType.Element
    21. strNameNode = objXMLReader.Name
    22. Case Xml.XmlNodeType.Text
    23. strTextNode = objXMLReader.Value
    24. TreeView1.Nodes.Add(strTextNode).Nodes.Add(strTextNode)
    25. MsgBox(strNameNode)
    26. Case Else
    27. End Select
    28. End While
    29. Catch ex As Exception
    30. MsgBox(ex.Message)
    31. End Try
    32. Catch ex As Exception
    33. MsgBox(ex.Message, MsgBoxStyle.Critical, "Error!")
    34. End Try
    35. Else
    36. XDocument.Load(Nothing.ToString)
    37. End If
    38. End Sub


    Ich weiß dass es bestimmt einen besseren Code gibt.
    Aber er kann XML auslesen .
    Keyboard nicht gefunden, bitte drücken sie ENTER

    Setz mal in die Zeile

    VB.NET-Quellcode

    1. objXMLReader = Xml.XmlReader.Create(XMLDateiPfad)
    einen Haltepunkt und steppe Dich durch, sieh nach, was passiert und was er tatsächlich ausliest.
    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!
    mach dir eine Methode, der man eine TreenodeCollection übergibt, sowie ein XContainer.

    Die Methode erstellt anhand des XElementes Treenodes und fügt sie in die TreenodeCollection ein.

    Dann ruft sie für jeden TreeNode sich selbst auf, und übergibt die Nodes des TreeNodes, und die Children des XContainers, was dazu führt, dass auch Unter-Treenodes gebildet werden.

    sowas nennt man Rekursion.

    Zum erstmaligen aufruf übergibst du das XDocument und die Nodes des Treeviews.
    Beim Haltepunkt hat objXMLReader den Wert nothing.

    @ErfinderDesRades ich kenne mich nicht sogut mit XML und Treeview aus, ich weiß nicht was du meinst, sry :(
    Keyboard nicht gefunden, bitte drücken sie ENTER

    AntiMatterQ schrieb:

    Beim Haltepunkt hat objXMLReader den Wert nothing.

    Klar, Du musst erst den Create()-Befehl ausführen.
    Also: Sieh Dir im Break-Zustand dieses Menü an und führe Dein Programm schrittweise aus.
    Bilder
    • Debug.jpg

      41,03 kB, 386×604, 160 mal angesehen
    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 kenne mich nicht sogut mit XML und Treeview aus, ich weiß nicht was du meinst, sry :(
    Dein Untertitel "Coder" legt anderes nahe.

    Ansonsten dachte ich, du wollest es lernen. Da kann hilfreich sein, nicht verstandenes nachzufragen, aber das ist nur hilfreich, wenn die Fragen präzise genug sind.
    Auf ein "Ich kenne mich nicht aus" hin kann man eiglich nix erhellendes antworten, ausser vlt. dieses Buch Lesen - danach kennstedich aus ;)
    Dieses Buch !!
    Es ist riesig !!
    Ihr werdet vieleicht eine Woche nichts von mir hören !
    MUSS LESEN !
    THX für das Buch, Vielen Dank ! Danke !! :D :D :D :D :D

    Edit:Ich habe es hinbekommen, DANK DEM BUCH !!
    @ErfinderDesRades ich würde 10^99999999999 auf den Hilfreich-button klicken wenn es gehen würde DANKE MAN !!!!! :thumbsup: :thumbsup:
    Für die die es Interesiert:

    VB.NET-Quellcode

    1. Dim xml = XDocument.Load(XMLDateiPfad)
    2. Dim xmlObjekt = From Game In xml...<Game>
    3. For Each Game In xmlObjekt
    4. TreeView1.Nodes.Add(Game.<Name>.Value.ToString).Nodes.Add(Game.<Link>.Value.ToString)
    5. Next


    und die XML-Datei :

    XML-Quellcode

    1. <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
    2. <Games>
    3. <Game>
    4. <Name>Game</Name>
    5. <Link>C:\Program Files (x86)</Link>
    6. </Game>
    7. <Game>
    8. <Name>Game2</Name>
    9. <Link>C:\Program Files (x86)\a</Link>
    10. </Game>
    11. </Games>


    Danke auch an RodFromGermany da er auch versucht hat mir zu helfen ! :thumbsup:

    MFG AntiMatterQ bzw Tim
    Keyboard nicht gefunden, bitte drücken sie ENTER

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