ReplaceChild (MSXML)
Aus API-Wiki
Zur Navigation springenZur Suche springenMit replaceChild kann ein XML-Knoten ersetzt werden.
Set Result = object.replaceChild(newChild, oldChild)
Parameter
object
- (erforderlich) Verweis auf den Knoten, dessen Kindknoten ersetzt werden soll (Datentyp IXMLDOMNode)
newChild
- (erforderlich) Verweis auf den neuen Knoten (Datentyp IXMLDOMNode)
oldChild
- (erforderlich) Verweis auf den alten Knoten (Datentyp IXMLDOMNode)
Rückgabe
Result
- (optional) Verweis auf den Knoten, der entfernt wurde (Datentyp IXMLDOMNode)
Hinweise
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