XML editieren mit "XMLDocument"

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von creac.

    XML editieren mit "XMLDocument"

    Hallo liebe VB-Entwickler,
    ich hab aktuell ein kleines Problem mit der "XMLDocument" Klasse. Vermutlich liegt es nicht daran, dass es keine guten Beispiele gibt, sondern vielmehr daran, dass ich aktuell total auf dem sprichwörtlichen Schlauch stehe.

    Es geht um folgendes: Ich möchte mit der XMLDocument-Klasse folgende XML:
    Spoiler anzeigen

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <root>
    3. <Connections>
    4. <Connection0>
    5. <Name>ABC</Name>
    6. <IP>0.0.0.1</IP>
    7. <Subnetmask>255.255.255.0</Subnetmask>
    8. <Gateway>0.0.0.0</Gateway>
    9. <BevDNSServer>0.0.0.0</BevDNSServer>
    10. <AltDNSServer>0.0.0.0</AltDNSServer>
    11. </Connection0>
    12. <Connection1>
    13. <Name>DEF</Name>
    14. <IP>0.0.0.2</IP>
    15. <Subnetmask>255.255.255.0</Subnetmask>
    16. <Gateway>0.0.0.0</Gateway>
    17. <BevDNSServer>0.0.0.0</BevDNSServer>
    18. <AltDNSServer>0.0.0.0</AltDNSServer>
    19. </Connection1>
    20. <Connection2>
    21. <Name>GHI</Name>
    22. <IP>0.0.0.3</IP>
    23. <Subnetmask>255.255.255.0</Subnetmask>
    24. <Gateway>0.0.0.0</Gateway>
    25. <BevDNSServer>0.0.0.0</BevDNSServer>
    26. <AltDNSServer>0.0.0.0</AltDNSServer>
    27. </Connection2>
    28. </Connections>
    29. </root>


    Schreiben, bzw. editieren können. Der Benutzer soll eine eigene Verbindung hinzufügen können, welche dann als "Connection" + Zahl (Connection1, Connection2, usw.) abgespeichert wird. Das heißt, ich brauche eine Möglichkeit, eine neue "Connection" in "Connections" zu erstellen, dort die Elemente "Name", "IP", "Subnetzmaske", usw. zu erstellen, und anschließend die Werte einzufügen (bzw. direkt beim schreiben der Elemente, ist im Prinzip egal).

    Vermutlich ist es alles viel einfacher als gedacht, aber nochmals: Ich komm damit gerade nicht klar. Darum bitte ich um eure Hilfe. Ein einfaches Beispiel würde mir vollends genügen. Bitte keine Links - ich hab mir mit Sicherheit schon alles angeschaut, was es auf den ersten 10 Google-Ergebnisseiten gibt, aber das ist meist gar nichts zur "XMLDocument"-Klasse, oder total unübersichtlich. Anschließend möchte ich mich noch entschuldigen, falls dieses Forum das falsche für XMLs sein sollte.

    Mit freundlichen Grüßen,
    Yusago
    Also allem vorweg: Eine Bennenung mit Zahlen ist nicht im Sinne von Xml. Bau deine Datei lieber so auf.

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <root>
    3. <Connections>
    4. <Connection id="0">
    5. <Name>ABC</Name>
    6. <IP>0.0.0.1</IP>
    7. <Subnetmask>255.255.255.0</Subnetmask>
    8. <Gateway>0.0.0.0</Gateway>
    9. <BevDNSServer>0.0.0.0</BevDNSServer>
    10. <AltDNSServer>0.0.0.0</AltDNSServer>
    11. </Connection0>
    12. <Connection1>
    13. <Name>DEF</Name>
    14. <IP>0.0.0.2</IP>
    15. <Subnetmask>255.255.255.0</Subnetmask>
    16. <Gateway>0.0.0.0</Gateway>
    17. <BevDNSServer>0.0.0.0</BevDNSServer>
    18. <AltDNSServer>0.0.0.0</AltDNSServer>
    19. </Connection>
    20. <Connection id="2">
    21. <Name>GHI</Name>
    22. <IP>0.0.0.3</IP>
    23. <Subnetmask>255.255.255.0</Subnetmask>
    24. <Gateway>0.0.0.0</Gateway>
    25. <BevDNSServer>0.0.0.0</BevDNSServer>
    26. <AltDNSServer>0.0.0.0</AltDNSServer>
    27. </Connection>
    28. </Connections>
    29. </root>

    Einlesen kannst du den Code dann wie folgt:

    VB.NET-Quellcode

    1. Dim doc As New XmlDocument()
    2. doc.Load("pfad/datei.xml");
    3. 'oder
    4. doc.LoadXml(StringDerXmlBeinhält)

    Dann kannst du mit doc.RootElement.GetElementByTagName("Connections") alle Elemente mit Namen Connections abfangen. Wenn du nur eins hast, kannst du mit doc.RootElement.GetElementByTagName("Connections")(0) dieses ansprechen. Über den Wert ChildNodes kannst du neue Knoten hinzufügen.
    @TE: creac stimme ich insoweit zu, dass dein Xml ungeeignet ist, denn in Xml bedeutet ein unterschiedlicher TagName auch einen unterschiedlichen Objekt-Typ.
    aber deine Connections sind ja alle dasselbe, nämlich Typ Connection, und nicht Connection1, Connection2, Connection3.

    Aber XmlDocument (oder XDocument auch) ist insgesamt eine Verarbeitungs-Technologie auf zu niedrigem Level.

    nimm typisiertes Dataset, das nimmt dir die gesamte Xml-Seite ab (lesen, schreiben, interpretieren), und du kannst mit ordentlichen Klassen programmieren.

    Im Anhang eine fertige Lösung deiner Anforderung.

    Sehr viel weitere Möglichkeiten zu Dataset/Databinding findeste bei meinen einschlägigen Tuts.

    ZB DB-Programmierung ohne Datenbank enthält u.a. die Standard-Methode für eine "Änderungen abspeichern?" - Abfrage beim Schließen der App.

    @Marco: Jetzt auch ein Anhang mit Combo und Speicher-Abfrage
    Dateien

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



    Hier Jungs... Und wenn ich unter Fenster gehe, dann erhalte ich nicht mal eine Auswahlmöglichkeit.
    Doppelklick und Ziehen in VS klappt aber es kommt kein Inhalt!

    Grüßle Marco

    EDIT: Ich kann es auch mit F5 starten bzw ausführen
    EDIT 2: Habe es nun. Habe den projektexplorer geöffnet, die frmConnectionData.vb geladen und doppelklick auf ein Element gemacht!
    Problem gelöst! Habs letztlich mithilfe von folgendem hinbekommen. Danke an alle die helfen wollten.

    VB.NET-Quellcode

    1. Dim NameNode As XmlNode = _XMLDocument.CreateElement("Name")
    2. _XMLDocument.SelectSingleNode("/root/Connections/Connection" & ConNr).AppendChild(NameNode)

    Yusago schrieb:

    Problem gelöst! Habs letztlich mithilfe von folgendem hinbekommen. Danke an alle die helfen wollten.

    VB.NET-Quellcode

    1. Dim NameNode As XmlNode = _XMLDocument.CreateElement("Name")
    2. _XMLDocument.SelectSingleNode("/root/Connections/Connection" & ConNr).AppendChild(NameNode)

    du hast nicht wirklich gelesen, was wir geschrieben haben, oder?