ReplaceChild (MSXML)

Aus API-Wiki
Version vom 28. Februar 2007, 18:14 Uhr von Helge Rex (Diskussion | Beiträge) (Datentypen eingefügt)
Zur Navigation springenZur Suche springen

Mit replaceChild kann ein XML-Knoten ersetzt werden.

Set Result = object.replaceChild(newChild, oldChild)
Result optional IXMLDOMNode Verweis auf den Knoten, der entfernt wurde
object erforderlich IXMLDOMNode Verweis auf den Knoten, dessen Kindknoten ersetzt werden soll
newChild erforderlich IXMLDOMNode Verweis auf den neuen Knoten
oldChild erforderlich IXMLDOMNode Verweis auf den alten Knoten

replaceChild kann nur Kindknoten ersetzen, die sich eine Ebene tiefer befinden. Das Ersetzen eines Kindknotens auf gleicher oder höherer Ebene oder eines Kindknotens mindestens zwei Ebenen tiefer wird nur teilweise ausgeführt: Der neue Kindknoten wird dem Knoten hinzugefügt, der alte jedoch nicht gelöscht. Zusätzlich wird der Fehler XMLOM_INVALID_INSERT_POS ausgelöst.

Wenn newChild auf Nothing verweist, wird oldChild gelöscht.

Beispiel

Dim objXml As MSXML2.FreeThreadedDOMDocument
Dim strXml As String
Dim objNode As MSXML2.IXMLDOMNode
Dim objOldNode As MSXML2.IXMLDOMNode
Dim objNewNode As MSXML2.IXMLDOMNode

strXml = VBA.Constants.vbNullString
strXml = strXml & "<?xml version=""1.0""?>" & VBA.Constants.vbNewLine
strXml = strXml & "<bibliothek>" & VBA.Constants.vbNewLine
    strXml = strXml & vbTab & "<buecher>" & VBA.Constants.vbNewLine
        strXml = strXml & vbTab & vbTab & "<buch name=""VB für Dummies"" />" & VBA.Constants.vbNewLine
        strXml = strXml & vbTab & vbTab & "<buch name=""Turbo Pascal für Dummies"" />" & VBA.Constants.vbNewLine
    strXml = strXml & vbTab & "</buecher>" & VBA.Constants.vbNewLine
strXml = strXml & "</bibliothek>" & VBA.Constants.vbNewLine

Set objXml = New MSXML2.FreeThreadedDOMDocument
With objXml
    .async = False
    .validateOnParse = True

    If .loadXML(strXml) Then
        '   Neuen Knoten erzeugen
        Set objNewNode = .createNode(NODE_ELEMENT, "ebook", VBA.Constants.vbNullString)
        Call objNewNode.Attributes.setNamedItem(.createAttribute("name"))
        objNewNode.Attributes.getNamedItem("name").nodeValue = "Delphi für Dummies"
        
        '   Knoten auswählen, dessen Kindknoten geändert werden soll
        Set objNode = .selectSingleNode("/bibliothek/buecher")
        
        '   Kindknoten ändern
        Call objNode.replaceChild(objNewNode, objNode.selectSingleNode("buch[@name='Turbo Pascal für Dummies']"))
        
        '   Geändertes XML-Dokument anzeigen
        Debug.Print .xml
    Else
        Debug.Print "[Fehler] " & .parseError.reason
    End If
End With

Set objNewNode = Nothing
Set objOldNode = Nothing
Set objNode = Nothing
Set objXml = Nothing

Weblinks

MSDN Library: replaceChild



Diese Deklaration wurde von Helge Rex erstellt. Sollten Sie Fragen zur Verwendung der entsprechenden Funktion haben, so verwenden Sie hierfür bitte das Visual Basic Forum, die Artikeldiskussionsseite oder die Nutzerdiskussionsseite.