Nodes aus einer XML-Datei entfernen

  • VB.NET
  • .NET 4.5

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Nodes aus einer XML-Datei entfernen

    Hallo VB-Profis!

    Ich sitze gerade vor meinem ersten Projekt in VB.NET (Komme von VB6).
    Ziel ist es eine recht umfangreiche XML-Datei zu durchforsten und nicht mehr gültige Nodes zu entfernen.
    Das lesen der XML-Datei habe ich schon geschafft. Ebenso die Erkennung der zu löschenden Nodes.
    Allerdings werden beim Versuch diese Nodes zu löschen nur die Childnodes entfernt.
    Aber am besten ich zeige euch einmal meinen Quellcode sowie einen Auszug aus der XML-Datei.

    VB.NET-Quellcode

    1. Public Sub Projekttester(xmldatei, basisverzeichnis)
    2. Dim xmldoc As XmlDocument
    3. Dim knotenliste As XmlNodeList
    4. 'Dim knoten As Xmlnode
    5. Dim knoten As XmlNode
    6. ' Erzeuge das XML Dokument
    7. xmldoc = New XmlDocument()
    8. ' Lade die angegebene XML-Datei
    9. xmldoc.Load(xmldatei)
    10. ' Erzeuge eine Liste aller Knoten (Dabei entspricht jeder Knoten einem Projekt)
    11. knotenliste = xmldoc.SelectNodes("/geoproject/projects/project")
    12. ' Loope durch alle Knoten
    13. For Each knoten In knotenliste
    14. ' Suche den Childknoten mit der Bezeichnung "projectdirectory"
    15. For zaehler = 0 To knoten.ChildNodes.Count - 1
    16. If knoten.ChildNodes(zaehler).Name = "projectdirectory" Then
    17. projektverzeichnis = basisverzeichnis + "\" + knoten.ChildNodes(zaehler).InnerText
    18. ' jetzt prüfe ob das Projekt noch im Basisverzeichnis vorhanden ist
    19. If System.IO.Directory.Exists(projektverzeichnis) = False Then
    20. ' wenn es nicht mehr vorhanden ist lösche den Eintrag aus der XML-Datei und speichere sie
    21. knoten.RemoveAll()
    22. xmldoc.Save(xmldatei)
    23. End If
    24. Exit For
    25. End If
    26. Next zaehler
    27. Next knoten
    28. End Sub

    XML-Quellcode

    1. <geoproject version="1">
    2. <projects>
    3. <project>
    4. <projectname>11111 Ort1 Name1</projectname>
    5. <description>
    6. </description>
    7. <originator>Mustermann</originator>
    8. <dateofcreation>08.08.2014</dateofcreation>
    9. <projectdirectory>11111 Ort1 Name1</projectdirectory>
    10. <processor>Mustermann</processor>
    11. <projectlocale>Land</projectlocale>
    12. <attributes>
    13. <attribute>
    14. <name>Katastralgemeinde</name>
    15. <attributeValue>
    16. <stringelement>99999</stringelement>
    17. </attributeValue>
    18. </attribute>
    19. </attributes>
    20. </project>
    21. <project>
    22. <projectname>22222 Ort2 Name2</projectname>
    23. <description>
    24. </description>
    25. <originator>Mustermann</originator>
    26. <dateofcreation>20.08.2014</dateofcreation>
    27. <projectdirectory>22222 Ort2 Name2</projectdirectory>
    28. <processor>Mustermann</processor>
    29. <projectlocale>Land</projectlocale>
    30. <attributes>
    31. <attribute>
    32. <name>Katastralgemeinde</name>
    33. <attributeValue>
    34. <stringelement>99999</stringelement>
    35. </attributeValue>
    36. </attribute>
    37. </attributes>
    38. </project>
    39. </projects>
    40. </geoproject>

    Ziel ist es zu prüfen ob das "projectdirectory" noch auf der Festplatte vorhanden ist. Wenn nicht soll der gesamte Node von <project> bis </project> gelöscht werden.
    Nach Ausführung meines Codes bleiben aber <project> und </project> als Leichen übrig.
    Wie schaffe ich es den ganzen Node sauber zu entfernen?

    Danke für Eure Hilfe
    Werner
    Works as designed.
    Removes all the child nodes and/or attributes of the current node.
    Also alles innerhalb des Knotens.

    Wenn du den Knoten selbst entfernen willst, dann musst du eine Ebene höher und mit RemoveNode den entsprechenden Knoten löschen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --