Les interfaces du modèle d'objets de document XML, possèdent chacune certaines caractèristiques propres à elles-mêmes et extractibles par l'intermédiaire de propriétés adéquates.

Tout d'abord, le nom de l'objet en cours peut être récupéré par l'intermédiaire de la propriété nodeName applicable à tous les noeuds et plus spécifiquement pour les éléments tagName.

Nom_Noeud = Objet.nodeName
Nom_Noeud = Objet_Element.tagName

Les propriétés nodetype et nodeTypeString retournent le type du noeud en cours respectivement sous forme d'un nombre entier et d'une chaîne de caractères.

Type_Valeur = Objet_Noeud.nodeType
Type_Chaine = Objet_Noeud.nodeTypeString

Ce genre de fonctionnalités permet de construire des programmes conditionnels en fonction du noeud rencontré. Par exemple, un noeud textuel ne peut contenir d'autres noeuds, donc dans le cadre du parcours automatique d'une arborescence, il serait inutile de tester la présence d'enfants. De même, la détection d'un noeud précis, comme une instruction de traitement peut se faire par l'intermédiaire d'une condition If comprise dans une boucle.

For Each Objet_Noeud In Liste_Noeuds
  Dim Tampon
  If Objet_Noeud.nodeType = 7 Then
  Tampon = Tampon & Objet_Noeud.value
  End If
Next
Les types de noeuds
Type (num - chaîne) Description
NODE_ELEMENT
(1 - element)
Noeud élément.
NODE_ATTRIBUTE
(2 - attribute)
Noeud attribut.
NODE_TEXT
(3 - text)
Noeud textuel.
NODE_CDATA_SECTION
(4 - cdatasection)
Noeud section CDATA.
NODE_ENTITY_REFERENCE
(5 - entityreference)
Noeud référence d'entité.
NODE_ENTITY
(6 - entity)
Noeud entité.
NODE_PROCESSING_INSTRUCTION
(7 - processinginstruction)
Noeud instruction de traîtement.
NODE_COMMENT
(8 - comment)
Noeud commentaire.
NODE_DOCUMENT
(9 - document)
Noeud racine.
NODE_DOCUMENT_TYPE
(10 - documenttype)
Noeud de définiton de type de document.
NODE_DOCUMENT_FRAGMENT
(11 - documentfragment)
Noeud fragment de document.
NODE_NOTATION
(12 - notation)
Noeud notation.

Par ailleurs, La méthode de noeuds hasChildNodes détermine si l'objet en cours contient une descendance.

True | False = Objet.hasChildNodes

La propriété length renvoie le nombre de noeuds à l'intérieur d'une collection.

Nombre_Items = Collection_Objets.length

Ces deux dernières propriétés peuvent servir à construire une structure conditionnelle déterminant si le'objet en cours possède des noeuds enfants ainsi que leur nombre.

If Objet.hasChildNodes Then
  For i = 0 To Objet.ChildNodes.length - 1
  Set Noeud = Objet.ChildNodes.item(i)
  Response.write "<h2>Noeuds Enfants</h2>"
                          & "Nom : " & Noeud.nodeName _
                          & "Valeur : " & Noeud.value _
                          & "Type : " & Noeud.nodeTypeString
  Next
Else
  Response.write "Nom : " & Objet.nodeName _
                        & "Valeur : " & Objet.value _
                        & "Type : " & Objet.nodeTypeString
End If

La propriété value retourne la valeur contenue au sein du noeud courant.

Valeur = Objet_Noeud.value

la propriété nodeTypedValue contient la valeur du noeud courant exprimée dans un type de donnée précisé en l'occurrence par la propriété dataType.

Objet_Noeud.dataType = Type
Valeur = Objet_Noeud.nodeTypedValue

La méthode getAttribute extrait une valeur d'attribut par l'intermédiaire de son nom.

Valeur = Objet_Element.getAttribute(Nom)

Plusieurs méthodes ou propriété existent dans le DOM XML afin de récupérer des chaînes de caractères sur des noeuds.

Lorsque la propriété text est utilisée pour récupérer le contenu textuel d'un noeud, le résultat comprend non seulement la chaîne de caractères dans le noeud courant mais également celles dans les noeuds descendants.

<?xml version="1.0"?>
<racine attribut="valeur racine">
  Texte libre
  <element attribut_2="valeur attribut_2">
  Valeur de l'élément
  </element>
  <(CDATA[Texte CDATA]]>
  <element_2>
  Valeur du deuxième élément
  </element_2>
</racine>

Response.Write Objet_Document.text
' Retourne
Texte libre Valeur de l'élément Texte
CDATA Valeur du deuxième élément

En définitive, seules les valeurs textuelles des éléments et des sections CDATA sont prises en compte, toutes les autres sont ignorées, comme les attributs, les commentaires et les instructions de traitement.

La propriété data récupère les données textuelles des noeuds CharacterData, Comment, Text ou ProcessingInstruction.

Chaine_Caracteres = Objet_Texte.data

La méthode splitText découpe un noeud textuel en deux à la position indiquée et insère le nouveau frère immédiatement après le noeud amputé.

Set Nouveau_Noeud = Noeud_Texte.splitText(Position)

La méthode subStringData récupére un intervalle de la valeur de chaîne de caractères d'un noeud textuel. La sous-chaîne est extraite à partir d'une position et jusqu'à un nombre indiqué.

Texte = Noeud_Texte.substringData(Position, Nombre)

La propriété length appliquée à un noeud textuel retourne le nombre total de caractères.

Nombre_Caractères = Objet_Texte.length
Exemple [voir]
<html><body>
<%
  Dim Objet_Document
  Dim racine, Objet_CDATA, Noeud_Frere

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

  fichier = Server.MapPath("livre.xml")
  Objet_Document.async = false
  Objet_Document.load fichier
  Set racine = Objet_Document.documentElement

  Response.Write "<h1>La collection comprend " & racine.childNodes.length _
                          & " livres.</h1><hr>"

  affichage = Visualise_Noeud(Objet_Document, 0) & "<hr>" _
           & "<h2>Le document a été modifié</h2>" & ajout()

  Function Visualise_Noeud(Objet_Noeud, nb_espaces)
    Dim resultat, i, nombre, nb_noeuds, Objet_Node
    resultat = ""

    For i = 1 To nb_espaces
      resultat = resultat & "  "
    Next

    resultat = resultat & "<b style='color: blue; font-weight: bold'>" _
               & Objet_Noeud.nodeName _
               & "</b>(" & Objet_Noeud.nodeTypeString & ") : " _
               & Objet_Noeud.nodeValue

    If Objet_Noeud.nodeType = 1 Then
      If Objet_Noeud.attributes.Length Then
        For Each Attribut In Objet_Noeud.attributes
          resultat = resultat & "[ <b>" & Attribut.nodeName _
                  & "</b>(" & Attribut.nodeTypeString & ") : " _
                  & Attribut.nodeValue & " ]<br>"
        Next
      Else
        resultat = resultat & "<br>"
      End If
    Else
      resultat = resultat & "<br>"
    End If

    nb_noeuds = Objet_Noeud.childNodes.length

    For nombre = 0 To nb_noeuds - 1
      Set Objet_Node = Objet_Noeud.childNodes(nombre)
      resultat = resultat & Visualise_Noeud(Objet_Node, nb_espaces + 2)
    Next
    Visualise_Noeud = resultat
  End Function

  Function ajout()
    Set Objet_Node = Objet_Document.selectSingleNode _
                          ("//livre[nom = ""ASP, ADO, and XML Complete""]")
    Set Objet_CDATA = Objet_Document.createCDATASection(" " _
                          & "<p>Un livre de <b>Kurt Gagle</b>," _
                          & " auteur également de...</p>")
    Objet_Node.insertBefore Objet_CDATA, Objet_Node.firstChild

    Set Noeud_frere = Objet_Node.childNodes.item(1)

    modification = modification & "<u>La section CDATA suivante a " _
                            & "été ajoutée avant le noeud <b>" _
                 & Noeud_Frere.NodeName & " (" & Noeud_Frere.text _
                 & ")</b> :</u>" & Objet_CDATA.text

    Set Objet_Node = Nothing
    Set Noeud_Frere = Nothing

    Set Objet_Node = Objet_Document.selectSingleNode _
                          ("//livre[nom = ""XSLT Programmer's reference""]")

    Set Nouvel_Objet_CDATA = Objet_CDATA.cloneNode(true)

    Nouvel_Objet_CDATA.replaceData 19, 10, "Michael Kay"
    Nouvel_Objet_CDATA.replaceData 43, 12, "de nombreux ouvrages"

    Set Noeud_frere = Objet_Node.childNodes.item(1)

    Objet_Node.insertBefore Nouvel_Objet_CDATA, Objet_Node.firstChild

    Set Noeud_frere = Objet_Node.childNodes.item(1)

    modification = modification & "<u>La section CDATA suivante a " _
                            & "été ajoutée avant le noeud <b>" _
                 & Noeud_Frere.NodeName & " (" & Noeud_Frere.text _
                 & ")</b> :</u>" & Nouvel_Objet_CDATA.text

    Set Objet_Node = Nothing
    Set Noeud_Frere = Nothing

    Set oLivre4 = Objet_Document.selectSingleNode("//livre[3]/nom")

    Set Objet_Node = Objet_Document.selectSingleNode _
                          ("//livre[nom = ""Mastering Active Server Pages 3""]")

    Set Nouvel_Objet_CDATA = Objet_CDATA.cloneNode(true)

    Nouvel_Objet_CDATA.replaceData 19, 10, "Russell Jones"
    Nouvel_Objet_CDATA.replaceData 45, Nouvel_Objet_CDATA.length, _
                                            "du livre " & oLivre4.text & "."

    Set Noeud_frere = Objet_Node.childNodes.item(1)

    Objet_Node.insertBefore Nouvel_Objet_CDATA, Objet_Node.firstChild

    Set Noeud_frere = Objet_Node.childNodes.item(1)

    modification = modification & "<u>La section CDATA suivante a " _
                            & "été ajoutée avant le noeud <b>" _
                 & Noeud_Frere.NodeName & " (" & Noeud_Frere.text _
                 & ")</b> :</u>" & Nouvel_Objet_CDATA.text

    ajout = modification
  End Function

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

  affichage2 = Visualise_Noeud(Objet_Document, 0)

  Set Objet_Node = Nothing
  Set Noeud_Frere = Nothing
  Set Objet_Document = Nothing
%>
<div><%= affichage %></div>
<hr>
<div><%= affichage2 %></div>
</body></html>