Le modèle d'objet de document contient des interfaces et de nombreuses méthodes ou propriétés permettant de récupérer des informations ciblées dans un document XML.

Chaque noeud d'un document XML est représenté par un objet spécifique. Néanmoins, le noeud générique Node peut contenir n'importe lequel d'entre eux.

Les Objets
Objet Description
Document représente le document XML complet susceptible de contenir tous les autres noeuds.
Node correspond à n'importe lequel des noeuds dans l'arborescence d'un document XML, y compris ce-dernier
<Noeud>...</Noeud>, noeud="valeur", ....
Attribute représente un noeud attribut ayant pour valeur un noeud texte,
<Element Attribut="Valeur"/>.
CDATASection représente une section CDATA,
<![CDATA[Texte...]]>.
CharacterData représente un noeud CDATASection, Comment ou Text.
Comment représente un commentaire
<!-- Commentaire -->.
DocumentType représente la définition de type de document ne pouvant contenir que des noeuds entités ou notations,
<!DOCTYPE...[...]>
Element représente un noeud élément ayant éventuellement pour valeur un noeud texte,
<Element> [Valeur] </Element>.
Entity représente une entité dans une DTD,
<!ENTITY...>.
EntityReference représente une référence d'entité contenu dans un noeud texte,
&Référence_Entité;.
Notation représente une notation dans une DTD,
<!NOTATION...>.
ProcessingInstruction représente une instruction de traîtement
<?Instruction Valeur?>.
SchemaCache représente un espace de noms et un schéma dans le document.
Text représente un noeud ou un ensemble de noeuds textuel. Ce noeud est présent dans les attributs et les éléments.

La méthode nodeFromID récupère un noeud par l'intermédiaire de son identificateur.

Objet_Noeud = Objet_Document.nodeFromID(Identificateur)

La méthode selectSingleNode retourne le noeud sélectionné à l'aide d'une expression XSL ou XPath.

Objet_Noeud = Objet.selectSingleNode(Expression)

La méthode getAttributeNode renvoie un noeud attribut par l'intermédiaire de son nom.

Objet_Attribut = Objet_Element.getAttributeNode(Nom)

Par ailleurs, des collections permettent de regrouper plusieurs objets résultant d'une partie de l'arborescence XML d'un document. Ces collections peuvent être obtenues à l'aide de propriétés ou de méthodes appliquées à des objets susceptibles de contenir des noeuds, à l'image des éléments contenant des attributs et d'autres éléments.

Les Collections
Collection Description
NamedNodeMap représente une collection d'attributs, d'entités ou de notations.
NodeList représente une liste de noeuds.
DocumentFragment représente un fragment de document.
SchemaCollection représente les espaces de noms et les schémas dans le document.
Selection représente un ou plusieurs noeuds sélectionnés par une expression XPath.

La méthode selectNodes retourne une collection de noeuds résultant d'une expression XSL ou XPath.

Set Collection_Noeuds = Objet.selectNodes(Expression)

La méthode getElementsByTagName renvoie une collection d'éléments correspondant à un nom précis. Cette méthode est essentiellement applicable à un document et aux éléments.

Set Collection_Elements = Objet.getElementByTagNames(Nom)

La propriété attributes retourne une collection d'attributs provenant d'un noeud élément en cours.

Set Liste_Attributs = Objet_Element.attributes

La collection NodeList contient une liste de noeuds dépendant du noeud en cours sans distinction de type. Ainsi, la liste de noeuds de l'objet Document peut être composé d'une instruction de traîtement, d'une déclaration de type de document et d'un élément racine.

La méthode ChildNodes de l'objet Document permet d'extraire une liste de noeuds enfants.

Set Liste_Noeuds = Objet_Document.childNodes

Il est possible de parcourir une liste de noeuds par l'intermédiaire d'une boucle For...To...Next et des méthodes length et item.

For i = 0 To Liste_Noeuds.length - 1
  Response.Write Liste_Noeuds.item(i).value
Next

L'objet Node peut être extrait par la méthode item à l'intérieur d'une collection de noeuds ou d'un objet selection.

Set Objet_Noeud = Liste_Noeuds.item(Index)

Set Objet_Noeud = Objet_selection.item(Index)

Plus spécifiquement, la méthode getNamedItem permet d'accéder à un noeud attribut par l'intermédiaire de son nom.

Set Objet_Attribut = Liste_Attributs.getNamedItem(Nom)

La méthode nextNode permet d'atteindre le prochain noeud dans la collection nodeList ou dans un objet Selection. La méthode peekNode est équivalente à celle précité hormis que la position de ligne n'est pas avancée.

Set Objet_Noeud = Liste_Noeuds.nextNode

Set Objet_Noeud = objet_Selection.nextNode

Set Objet_Noeud = Objet_selection.peekNode

Il est possible de récupérer tous les noeuds d'une collection en utilisant une boucle For Each... appliquée à une liste de noeuds NodeList.

For Each Objet_Noeuds In Liste_Noeuds
  Response.Write Objet_Noeuds.value
Next

L'objet Document dispose de propriétés pouvant retourner directement le premier (firstChild) ou le dernier (lastChild) noeud enfant.

Set Premier_Noeud = Objet_Document.FirstChild
Set Dernier_Noeud = Objet_Document.lastChild

Les noeuds possédent également des propriétés dont la fonction est d'accéder à leur frère direct en amont (previousSibling) ou en aval (nextSibling).

Set Frere_Precedent = Objet_Noeud.previousSibling
Set Frere_Suivant = Objet_Noeud.nextSibling

D'autres noeuds précis tels que le noeud racine (documentElement), le type de document (docType) ou le contenu textuel (text) sont également directement récupérable à partir de l'objet Document.

Set Noeud_Racine = Objet_Document.documentElement
Set Noeud_DTD = Objet_Document.docType
Set Contenu_Texte = Objet_Document.text

A partir d'un noeud enfant quelconque dans l'arborescence d'un document XML, la propriété parentNode permet de remonter à l'ascendance de l'interface et la propriété ownerDocument, au noeud document dont il dépend.

Set Noeud_Parent = Objet_Noeud.parentNode

Set Objet_Document = Objet_Noeud.ownerDocument
Exemple [voir]
<%
  Dim Objet_Document
  Dim Objet_NodeList
  Dim noeud, resultat
  Dim oEditeur, oCommentaire

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

  Objet_Document.async = false
  fichier = Server.MapPath("logitheque.xml")
  Objet_Document.load fichier

  If Objet_Document.parseError.errorCode <> 0 Then 
    Response.Write "Une erreur s'est produite " _
                     & "lors de l'analyse du fichier !"
  Else
    Set Objet_NodeList = Objet_Document.getElementsByTagName("logiciel")

    For i = 0 To Objet_NodeList.length - 1 Step 2
      set noeud = Objet_NodeList.item(i)
      set oEditeur = noeud.selectSingleNode("editeur")
      set oCommentaire = noeud.selectSingleNode("commentaire")
      resultat = resultat & "<tr><td>" _
                           & noeud.attributes.item(0).nodeValue _
                           & "</td><td> : <b style='color:blue'>" _
                           & noeud.firstchild.text & "</b></td></td><td>" _
                           & oEditeur.text & "</td></td><td>" _
                           & oCommentaire.text & "</td></tr>"
    Next
    Response.Write "<h3>La liste comporte " & Objet_NodeList.length _
                     & " noeuds.</h3><hr><table><tr><th>Code</th>" _
                     & "<th>Nom</th></tr>" & resultat & "</table>"
  End If
%>