XML-Node hinzufügen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Achilleus.

    XML-Node hinzufügen

    Hallo Leute,

    ich stehe mit den XML-Dateien einfach auf Kriegsfuß.
    Um nicht immer manuell die XML-Datei zu bearbeiten, möchte ich die Node-Elemente über mein Programm bearbeiten.
    Das ändern der Nodes klappt schon, aber mit dem hinzufügen komme ich einfach nicht weiter.

    Und so sieht mein XML-Datei aus.

    XML-Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <Standardtexte>
    3. <!-- Formulare Steuerbescheidprüfung -->
    4. <!-- Steuerauswahl Steuerbescheide -->
    5. <Bescheide>
    6. <ID0>ESt. incl. SolZ</ID0>
    7. <ID1>ESt. incl. SolZ u. KiSt.</ID1>
    8. <ID2>ESt. Verlustfeststellung</ID2>
    9. [...]
    10. <!-- Verlustbescheide sind Info (Sonderbereich) => 0 = Standart / 1 = Info -->
    11. <Info>
    12. <ID0>0</ID0>
    13. <ID1>0</ID1>
    14. <ID2>1</ID2>
    15. [...]
    16. </Info>
    17. </Bescheide>
    18. </Standardtexte>



    Um die zu ändern habe ich folgende Sub-Routine:

    VB.NET-Quellcode

    1. Private Sub Save_Profile()
    2. Dim XMLFile As String = GetXMLPath()
    3. Dim xmlDoc As New Xml.XmlDocument, KeynodesStB As Xml.XmlNodeList, KeynodesInfo As Xml.XmlNodeList
    4. Dim i As Integer = 0
    5. Dim t1 As String = "", t2 As String = ""
    6. Dim singleKeyNode As Xml.XmlNode = Nothing
    7. xmlDoc.Load(XMLFile) 'opens XML file
    8. For i = 0 To dgvProfile.Rows.Count - 1
    9. KeynodesStB = xmlDoc.SelectNodes("Standardtexte/Bescheide/ID" & i)
    10. KeynodesInfo = xmlDoc.SelectNodes("Standardtexte/Bescheide/Info/ID" & i)
    11. singleKeyNode = KeynodesStB.Item(0)
    12. If singleKeyNode Is Nothing Then
    13. Dim newElem As Xml.XmlNode = xmlDoc.CreateNode("Standardtexte", "Bescheide\ID" & i, "")
    14. newElem.InnerText = dgvProfile.Item(0, i).Value.ToString
    15. Dim root As Xml.XmlElement = xmlDoc.DocumentElement
    16. root.AppendChild(newElem)
    17. Else
    18. singleKeyNode.InnerText = dgvProfile.Item(0, i).Value.ToString
    19. End If
    20. singleKeyNode = KeynodesInfo.Item(0)
    21. If singleKeyNode Is Nothing Then
    22. Dim newElem As Xml.XmlNode = xmlDoc.CreateNode("Standardtexte", "Bescheide\Info", "ID" & i)
    23. newElem.InnerText = dgvProfile.Item(1, i).Value.ToString
    24. Dim root As Xml.XmlElement = xmlDoc.DocumentElement
    25. root.AppendChild(newElem)
    26. Else
    27. singleKeyNode.InnerText = Convert.ToInt16(dgvProfile.Item(1, i).Value)
    28. End If
    29. Next
    30. xmlDoc.Save(GetXMLPath())
    31. Me.Close()
    32. End Sub


    Mein Problem ist jetzt, dass ich nicht weiß, wie ich Einträge hinzufügen kann. Ich komme da einfach nicht weiter. ;(
    Kann mir einer hierbei helfen? <3

    Vielen Dank im Voraus.

    Gruß Achilleus
    Du musst natürlich wissen wo du den Node unterbringen willst und bis dahin durch-loopen
    Sorry ist C# aber das sollte eigentlich kein Problem sein.

    C#-Quellcode

    1. //Create a new node.
    2. XmlNode item = doc.DocumentElement;
    3. XmlElement elem1 = doc.CreateElement("InfoData");
    4. elem1.SetAttribute(author, "Name");
    5. //Add the node to the document.
    6. item.AppendChild(elem1);
    Hallo @ErfinderDesRades

    ich bin schon einmal soweit, dass ich in die XML-Datei einen Eintrag hinzufügen kann.

    VB.NET-Quellcode

    1. Public Sub xmlAppend(ByVal Id As String, ByVal Value As String)
    2. Dim xmlPath As String = GetXMLPath()
    3. Dim myDoc As Xml.XmlDocument = New Xml.XmlDocument
    4. myDoc.Load(xmlPath)
    5. Dim root As XmlNode = myDoc.DocumentElement
    6. Dim myElement As XmlElement = root.SelectSingleNode("Bescheide")
    7. Dim myName As XmlElement = myDoc.CreateElement("ID" & Id)
    8. myName.InnerText = Value
    9. root.InsertAfter(myName, myElement)
    10. myDoc.Save(xmlPath)
    11. End Sub


    Allerdings ist das nun auch nicht die richtige Lösung, da der Eintrag nicht innerhalb des Tags erstellt wird, sondern einfach darunter hinzugefügt.

    XML-Quellcode

    1. <!-- Steuerauswahl Steuerbescheide -->
    2. <Bescheide>
    3. <ID0>ESt. incl. SolZ</ID0>
    4. <ID1>ESt. incl. SolZ u. KiSt.</ID1>
    5. <ID2>ESt. Verlustfeststellung</ID2>
    6. <!-- Verlustbescheide sind Info (Sonderbereich) => 0 = Standart / 1 = Info -->
    7. <Info>
    8. <ID0>0</ID0>
    9. <ID1>0</ID1>
    10. <ID2>1</ID2>
    11. </Info>
    12. </Bescheide>
    13. <ID3>Grundsteuer</ID3>


    Ich habe es auch schon mit der Anweisung myElement.InsertAfter(myName, myElement) versucht, erhalte da aber immer eine Fehlermeldung.
    Irgendwie muss ich doch den Eintrag in dem Tag Bescheide hinzufügen können.

    Gruß Achilleus

    [Nachtrag]

    Ich habe jetzt die Lösung:

    VB.NET-Quellcode

    1. Public Sub xmlAppend(ByVal Id As String, ByVal Value As String)
    2. Dim xmlPath As String = GetXMLPath()
    3. Dim myDoc As New Xml.XmlDocument
    4. myDoc.Load(xmlPath)
    5. Dim root As XmlNode = myDoc.DocumentElement
    6. Dim myElement As XmlElement = root.SelectSingleNode("Bescheide")
    7. Dim xNode As XmlNode = myElement
    8. Dim myName As XmlElement = myDoc.CreateElement("ID" & Id)
    9. myName.InnerText = Value
    10. xNode.AppendChild(myName)
    11. myDoc.Save(xmlPath)


    Damit wird der Eintrag richtig gesetzt.
    ich muss nur noch meine XML-Datei etwas ändern und dann klappt das auch.

    XML-Quellcode

    1. <Bescheide>
    2. <ID0>
    3. <Name>ESt. incl. SolZ</Name>
    4. <Info>0</Info>
    5. </ID0>
    6. </Bescheide>

    Dann werden die Einträge auch richtig dargestellt.

    Gruß Achilleus

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