Le modèle d'objet de document (DOM) propose des solutions destinées à l'insertion, à la mise à jour ou à la suppression de noeuds dans l'arborescence d'un document XML.

L'objet Document demeure l'interface privilégiée pour les opérations de créations d'objets tels que des éléments, des attributs, des sections CDATA, des instructions de traitement, etc..

Les Méthodes
Méthode
Description
Set Attribut = Objet_Document.createAttribute(Nom)
crée un attribut.
Set SectionCDATA = Objet_Document.createCDATASection(Données)
crée une nouvelle section CDATA
Set Commentaire = Objet_Document.createComment(Données)
crée un nouveau commentaire.
Set Fragment = Objet_Document.createDocumentFragment
crée un fragment de document.
Set Element = Objet_Document.createElement(nom)
crée un noeud élément.
Set RefEntite = Objet_Document.createEntityReference(nom)
crée une référence d'entité.
Set Noeud = Objet_Document.createNode(Type, Nom, URI_Espace_Nom)
crée un noeud selon le type fourni en argument.
Set PI = Objet_Document.createProcessingInstruction(Cible, Données)
crée une instruction de traitement.
Set Texte = Objet_Document.createTextNode(Données)
crée un noeud contenant du texte.

Suite à la création d'un noeud, la méthode appendChild ajoute un nouvel enfant à la fin de sa propre collection de noeuds.

Set Noeud_Ajoute = Objet_Noeud.appendChild(Nouvel_Enfant)

Une autre méthode insertBefore insère le noeud avant l'endroit spécifié par l'argument Référence.

Set Noeud_Insere = _
               Objet_Noeud.insertBefore(Nouvel_Enfant, Référence)

De même, la méthode setAttribute ajoute un attribut avec ses nom et valeur fournis, directement dans un élément.

Objet_Element.setAttribute(Nom, Valeur)

Tandis que, la méthode setAttributeNode ajoute un objet Attribute précédemment créé dans un objet élément.

Set Attribut_Ajoute = _
               Objet_Element.setAttributeNode(Objet_Attribut)

Une dernière méthode setNamedItem ajoute un nouvel attribut dans une collection.

Set Noeud_Ajoute = _
               Collection_Attributs.setNamedItem(Nouveau_Noeud)

L'objet générique Node permet également de remplacer (replaceChild) ou de supprimer (removeChild) n'importe quel noeud enfant.

Objet_Noeud.replaceChild(Nouvel_Enfant, Ancien_Enfant)

Objet_Noeud.removeChild(Noeud_Enfant)

D'autres méthodes de suppression existent dans le DOM. Respectivement, elles enlèvent tous les noeuds (removeAll) ou le prochaîn noeud (removeNext) d'une sélection, un attribut d'un élément (removeAttribute) ou d'une collection (removeAttributeNode, removeNamedItem et removeQualifiedItem) et enfin un espace de noms d'une collection de schéma.

Objet_Selection.removeAll

Set Noeud_Supprime = Objet_Selection.removeNext

Objet_Element.removeAttribute(Nom)

Set Attribut_Supprime = _
                  Objet_Element.removeAttributeNode(Objet_Attribut)

Set Attribut_Supprime = _
                  Collection_Attributs.removeNamedItem(Nom)

Set Attribut_Supprime = _
                  Collection_Attributs.removeQualifiedItem _
                                (Nom_Base, URI_Espace_de_Noms)

Collection_Schema.remove(URI_Espace_de_Noms)

La méthode appendData appliquée à des noeuds textuels comme un commentaire ou un section CDATA, permet d'ajouter à la fin du contenu, les données textuelles indiquées.

Objet_Texte.appendData(Donnée)

La propriété data permet d'affecter des données textuelles à un noeud CharacterData, Comment, Text ou ProcessingInstruction.

Objet_Texte.data = Chaine_Caracteres

La méthode replaceData, dans les mêmes conditions que précitées, remplace un contenu textuel à une position et jusqu'à un nombre spécifié un texte fourni en argument.

Objet_Texte.replaceData(Position, Nombre, Donnée)

La méthode deleteData supprime un intervalle de texte à partir d'une position et jusqu'à un nombre spécifié.

Objet_Texte.deleteData(Position, Nombre)

La méthode normalize fusionne plusieurs noeuds textuels adjacents afin d'en produire un seul, normalisant ainsi, tous les éléments descendants.

Objet_Element.normalize

Par ailleurs, la méthode cloneNode effectue une duplication du noeud courant si la valeur est False ou du noeud et de sa descendance si la valeur est True.

Set Objet_Duplique = Objet_Noeud.cloneNode(True|False)

En outre, une autre méthode de duplication est applicable à un objet Selection.

Set Selection_Duplique = Objet_Selection.clone
Exemple [voir]
<%
  Dim Objet_Document, Objet_Style, oCommentaire
  Dim racine, PI_xml, PI_stylesheet, fichier_XSL
  Dim oAuteur, cAuteur, oDecription, cDescription
  Dim oNom, oOeuvres, oPoeme, cPoeme
  Dim auteur, description, titre
  Dim quatrain_A, quatrain_B, quatrain_C
  Dim quatrain_D, quatrain_E, saut

  Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument.4.0")
  Set Objet_Style = Server.CreateObject("MSXML2.DOMDocument.4.0")

  fichier_XSL = Server.MapPath("recueil.xsl")
  Objet_Style.async = False
  Objet_Style.Load fichier_XSL

  Set racine = Objet_Document.createElement("recueil")
  Objet_Document.appendChild racine

  saut = vbCrLf & vbCrLf

  auteur = "Heinrich HEINE"

  description = "Heinrich HEINE vécut en Allemagne entre 1797 et 1856." _
            & "Il est un poète romantique par excellence, qui chante " _
            & "l'amour entre la cruelle déception et un certain cynisme. " _
            & "De plus, il a fortement influencé les milieux littéraires " _
            & "parisiens, qu'il ne cessa de fréquenter jusqu'à sa mort."

  titre = "Die Zeit"

  quatrain_A = "Ah! qu'il est lent, ah comme il traîne," & vbCrLf _
           & "le Temps horrible limaçon !" & vbCrLf _
           & "Sans pouvoir remuer un membre," & vbCrLf _
           & "je gis ici, cloué sur place."

  quatrain_B = "En ma cellule ne vient luire" & vbCrLf _
           & "nul rai de soleil ni d'espoir." & vbCrLf _
           & "Jusqu'à la fosse au cimetière," & vbCrLf _
           & "je suis voué à mon grabat."

  quatrain_C = "Mourir, c'est déjà fait, peut-être;" & vbCrLf _
           & "peut-être n'est-ce que fantômes," & vbCrLf _
           & "ces visions qui font la foire" & vbCrLf _
           & "toute la nuit dans mon cerveau."

  quatrain_D = "Oui c'est peut-être le spectrale" & vbCrLf _
           & "sarabande des dieux païens;" & vbCrLf _
           & "pour leur ébats ça leur va bien," & vbCrLf _
           & "le crâne creux d'un trépassé."

  quatrain_E = "Mais la folle, la douce orgie," & vbCrLf _
           & "ces bacchanales de la nuit," & vbCrLf _
           & "la main du squelette se crispe" & vbCrLf _
           & "au matin pour les esquisser."

  Set cPoeme = Objet_Document.createTextNode(quatrain_B)

  Set oAuteur = Objet_Document.createElement("auteur")
  Set oNom = Objet_Document.createElement("nom")
  Set cAuteur = Objet_Document.createTextNode(auteur)
  Set oDescription = Objet_Document.createElement("description")
  Set cDescription = Objet_Document.createTextNode(description)
  Set oOeuvres = Objet_Document.createElement("oeuvres")
  Set oPoeme = Objet_Document.createElement("poeme")
  oPoeme.setAttribute "titre", titre

  cPoeme.insertData 0, quatrain_A & saut
  cPoeme.insertData cPoeme.length, saut
  cPoeme.insertData cPoeme.length, quatrain_C & saut
  cPoeme.insertData cPoeme.length, quatrain_D & saut
  cPoeme.insertData cPoeme.length, quatrain_E

  oAuteur.appendChild oNom
  oDescription.appendChild cDescription
  oAuteur.appendChild oDescription

  oPoeme.appendChild cPoeme
  oOeuvres.appendChild oPoeme
  oAuteur.appendChild oOeuvres
  oNom.appendChild cAuteur

  oPoeme.normalize

  racine.appendChild oAuteur

  Set PI_xml = _
        Objet_Document.createProcessingInstruction("xml", _
                             "version='1.0' encoding='iso-8859-1'")
  Set PI_stylesheet = _
        Objet_Document.createProcessingInstruction("xml-stylesheet", _
                             "type='text/xsl' href='" & fichier_XSL & "'")

  Objet_Document.insertBefore PI_xml, racine
  Objet_Document.insertBefore PI_stylesheet, racine

  Set oCommentaire = _
        Objet_Document.createComment("Fichier créé le " & date & ".")

  racine.appendChild oCommentaire

  Objet_Document.save Server.MapPath("recueil.xml")

  Response.Write Objet_Document.transformNode(Objet_Style)

  Response.Write Objet_Document.transformNode(Objet_Style) _
             & "<h4>Le fichier XML est disponible à l'adresse " _
             & " suivante : " & Server.MapPath("recueil.xml") & "</h4>"

  Set Objet_Document = Nothing
  Set Objet_Style = Nothing
%>