ReplaceChild (MSXML): Unterschied zwischen den Versionen

Aus API-Wiki
Wechseln zu: Navigation, Suche
K (Änderungen von 109.73.68.18 (Diskussion) rückgängig gemacht und letzte Version von Helge Rex wiederhergestellt)
Zeile 37: Zeile 37:
 
Dim objNewNode As MSXML2.IXMLDOMNode
 
Dim objNewNode As MSXML2.IXMLDOMNode
  
strXml = VBA.Constants.vbNullString
+
strXml = VBA.Constants.<syntaxhighlight lang="vb">NullString
strXml = strXml & "<?xml version=""1.0""?>" & VBA.Constants.vbNewLine
+
strXml = strXml & "<?xml version=""1.0""?>" & VBA.Constants.<syntaxhighlight lang="vb">NewLine
strXml = strXml & "<bibliothek>" & VBA.Constants.vbNewLine
+
strXml = strXml & "<bibliothek>" & VBA.Constants.<syntaxhighlight lang="vb">NewLine
     strXml = strXml & vbTab & "<buecher>" & VBA.Constants.vbNewLine
+
     strXml = strXml & <syntaxhighlight lang="vb">Tab & "<buecher>" & VBA.Constants.<syntaxhighlight lang="vb">NewLine
         strXml = strXml & vbTab & vbTab & "<buch name=""VB für Dummies"" />" & VBA.Constants.vbNewLine
+
         strXml = strXml & <syntaxhighlight lang="vb">Tab & <syntaxhighlight lang="vb">Tab & "<buch name=""VB für Dummies"" />" & VBA.Constants.<syntaxhighlight lang="vb">NewLine
         strXml = strXml & vbTab & vbTab & "<buch name=""Turbo Pascal für Dummies"" />" & VBA.Constants.vbNewLine
+
         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 & vbTab & "</buecher>" & VBA.Constants.vbNewLine
+
     strXml = strXml & <syntaxhighlight lang="vb">Tab & "</buecher>" & VBA.Constants.<syntaxhighlight lang="vb">NewLine
strXml = strXml & "</bibliothek>" & VBA.Constants.vbNewLine
+
strXml = strXml & "</bibliothek>" & VBA.Constants.<syntaxhighlight lang="vb">NewLine
  
 
Set objXml = New MSXML2.FreeThreadedDOMDocument
 
Set objXml = New MSXML2.FreeThreadedDOMDocument
Zeile 53: Zeile 53:
 
     If .loadXML(strXml) Then
 
     If .loadXML(strXml) Then
 
         '  Neuen Knoten erzeugen
 
         '  Neuen Knoten erzeugen
         Set objNewNode = .createNode(NODE_ELEMENT, "ebook", VBA.Constants.vbNullString)
+
         Set objNewNode = .createNode(NODE_ELEMENT, "ebook", VBA.Constants.<syntaxhighlight lang="vb">NullString)
 
         Call objNewNode.Attributes.setNamedItem(.createAttribute("name"))
 
         Call objNewNode.Attributes.setNamedItem(.createAttribute("name"))
 
         objNewNode.Attributes.getNamedItem("name").nodeValue = "Delphi für Dummies"
 
         objNewNode.Attributes.getNamedItem("name").nodeValue = "Delphi für Dummies"

Version vom 5. November 2016, 23:11 Uhr

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


Weblinks

MSDN Library: replaceChild