ReplaceChild (MSXML)
Aus API-Wiki
Version vom 5. November 2016, 22:11 Uhr von Jochen Wierum (Diskussion | Beiträge)
Mit 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.<syntaxhighlight lang="vb">NullString strXml = strXml & "<?xml version=""1.0""?>" & VBA.Constants.<syntaxhighlight lang="vb">NewLine strXml = strXml & "<bibliothek>" & VBA.Constants.<syntaxhighlight lang="vb">NewLine strXml = strXml & <syntaxhighlight lang="vb">Tab & "<buecher>" & VBA.Constants.<syntaxhighlight lang="vb">NewLine strXml = strXml & <syntaxhighlight lang="vb">Tab & <syntaxhighlight lang="vb">Tab & "<buch name=""VB für Dummies"" />" & VBA.Constants.<syntaxhighlight lang="vb">NewLine strXml = strXml & <syntaxhighlight lang="vb">Tab & <syntaxhighlight lang="vb">Tab & "<buch name=""Turbo Pascal für Dummies"" />" & VBA.Constants.<syntaxhighlight lang="vb">NewLine strXml = strXml & <syntaxhighlight lang="vb">Tab & "</buecher>" & VBA.Constants.<syntaxhighlight lang="vb">NewLine strXml = strXml & "</bibliothek>" & VBA.Constants.<syntaxhighlight lang="vb">NewLine 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.<syntaxhighlight lang="vb">NullString) 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