Erledigt XML Eintrag Komplett löschen

  • VB.NET

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

    Erledigt XML Eintrag Komplett löschen

    Hallo Zusammen,

    ich bräuchte gerade etwas Hilfe, da ich zur Zeit total auf dem Schlauch stehe.
    Ich habe für einen kleinen Streamplayer eine XML-Datei gebastelt:

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <streams>
    3. <stream>
    4. <name>Technobase.fm</name>
    5. <url>http://listen.technobase.fm/dsl.asx</url>
    6. </stream>
    7. <stream>
    8. <name>Housetime.fm</name>
    9. <url>http://listen.housetime.fm/dsl.asx</url>
    10. </stream>
    11. <stream>
    12. <name>Hardbase.fm</name>
    13. <url>http://listen.hardbase.fm/dsl.asx</url>
    14. </stream>
    15. <stream>
    16. <name>Coretime.fm</name>
    17. <url>http://listen.coretime.fm/dsl.asx</url>
    18. </stream>
    19. <stream>
    20. </stream>
    21. </streams>



    Da ich in meinem Tool eine Möglichkeit der Verwaltung haben will habe ich schon eine Funktion fürs Ändern geschrieben, da ich mich nun an die Löschen-Funktion machen wollte habe ich soweit etwas gebastelt:

    VB.NET-Quellcode

    1. 'Erstellen des XMLDocument Objektes und laden einer XML-Datei
    2. Dim xmlDoc As New Xml.XmlDocument
    3. xmlDoc.Load(XmlDateiPfad)
    4. 'Erstellen einer Liste mit allen Elementen die Stream heißen
    5. Dim Nodelist As Xml.XmlNodeList = xmlDoc.GetElementsByTagName("stream")
    6. 'Durchlaufe alle Punkte die in der Liste stehen
    7. For Each Node In Nodelist
    8. 'Erstellen der Ausgabevariale und zuweisen des jeweiligen Punktes aus der Liste
    9. Dim Ausgabe As Xml.XmlNode
    10. Ausgabe = Node
    11. If (Ausgabe.Item("name").InnerText = deleteName) Then
    12. Ausgabe.RemoveAll()
    13. End If
    14. Next
    15. xmlDoc.Save(XmlDateiPfad)


    Nun besteht mein Problem, das nach dem Löschen noch die äußeren Tags (<stream></stream>) überbleiben, ist ja auch soweit Richtig. Nur ich habe gerade keine Idee wie ich diese leeren Tags wieder weg bekomme.
    Für einen Schubs in die richtige Richtung wäre ich erfreut ;)

    Gruß,
    homekiller

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

    Hi,

    Du musst dir zuerst ne Liste von streams (=Liste von stream) holen. Und dann den ersten Eintrag nehmen. erst dieser ist dann Dein streams-node aus dem du den jeweiligen stream-Node identifizierst und aus dem streams-node löschen kannst. getcheckt?

    VB.NET-Quellcode

    1. Public Sub deleteStream(ByVal deletename As String)
    2. Dim ListOfStreamList As Xml.XmlNodeList = xmlDoc.GetElementsByTagName("streams")
    3. If ListOfStreamList.Count > 0 Then
    4. Dim streamsnode As Xml.XmlNode = ListOfStreamList.Item(0)
    5. For Each nd As Xml.XmlNode In streamsnode.ChildNodes
    6. If nd.Item("name").InnerText = deletename Then
    7. streamsnode.RemoveChild(nd)
    8. End If
    9. Next
    10. End If
    11. End Sub

    Gruß
    dingsda
    oder ganz einfach so

    VB.NET-Quellcode

    1. Public Sub deleteStream(ByVal deletename As String)
    2. Dim streamsnode As Xml.XmlNode = xmlDoc.Item("streams")
    3. If Not streamsnode Is Nothing Then
    4. For Each nd As Xml.XmlNode In streamsnode.ChildNodes
    5. If nd.Item("name").InnerText = deletename Then
    6. streamsnode.RemoveChild(nd)
    7. End If
    8. Next
    9. End If
    10. End Sub