Le langage ADO (ActiveX Data Objects) permet d'ouvrir des jeux d'enregistrements à partir de diverses sources XML telles qu'un fichier, un flux de données, un objet ASP Request ou même un objet DOMDocument.

L'ouverture d'un document XML par un objet Recordset se réalise selon différentes étapes.

  • Création d'une instance de l'objet Recordset,
  • Affectation de la propriété ActiveConnection à Nothing puisque la source de données n'est pas une base de données,
  • Paramétrage du curseur de sorte à l'utiliser côté client et en mode statique,
  • Verrouillage des enregistrements en lecture seule,
  • Chargement de la source XML, en fait des informations textuelles, dans l'objet Recordset à partir d'une adresse physique ou d'une URL complète,
  • Ouverture du jeu d'enregistrements.
Set Objet_Recordset = Server.CreateObject("ADODB.Recordset")
Set Objet_Recordset.ActiveConnection = Nothing
Objet_Recordset.CursorLocation = adUseClient
Objet_Recordset.CursorType = adOpenStatic
Objet_Recordset.LockType = adLockReadOnly
Objet_Recordset.Source = adresse_fichier.xml
Objet_Recordset.Open

L'objet Recordset ne parvient à ouvrir que des fichiers XML spécialement formaté et validé par un schéma. En fait, seuls des fichiers XML résultant d'un jeu d'enregistrements de base de données sont capables d'être directement traîtés par l'objet Recordset.

Espaces de noms des schémas
Déclaration
Description
xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
indique un espace de noms XML-Data contenant les éléments et attributs que définit le schéma du jeu d'enregistrement courant.
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
indique la spécification des définitions des type de données.
xmlns:rs="urn:schemas-microsoft-com:rowset"
indique un espace de noms contenant les éléments et les attributs spécifiques aux propriétés et attributs d'un objet Recordset.
xmlns:z="#RowsetSchema"
indique le schéma du jeu d'enregistrement courant.
<xml 
           xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
           xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
           xmlns:rs="urn:schemas-microsoft-com:rowset"
           xmlns:z="#RowsetSchema">
  <s:Schema id="RowsetSchema">
    <s:ElementType name="row" content="eltOnly" ...>
      <s:AttributeType name="attribut" rs:number="1" ...>
        <s:datatype dt:type="type_données"
                          dt:maxlength="taille_max" .../>
      </s:AttributeType>
      ...
      <s:extends type="rs:rowbase"/>
    </s:ElementType>
  </s:Schema>

  <rs:data>
    <z:row attribut="valeur".../>
    ...
  </rs:data>
</xml>

Constituant un autre moyen d'ouvrir un fichier XML, l'objet ADO Stream possède un rôle central dans la conjonction entre le langage ActiveX Data Objects et le XML (eXtended Makup Language).

En effet, un flux de données binaires ou textuelles contenant des informations XML peut être aisément manipulé par l'objet Stream. Ce dernier est utilisé pour la lecture et l'écriture dans le flux mais aussi pour la réception de la source XML et l'envoi du résultat soit à un fichier, soit à un objet ASP Response, soit à un objet DOMDocument.

Dim Objet_Stream
Set Objet_Stream = Server.CreateObect("ADODB.Stream")
Objet_Stream.open adresse_fichier.xml

Une autre moyen permet de charger un fichier XML dans un objet Stream en utilisant la méthode LoadFromFile.

Objet_Stream.open
Objet_Stream.loadFromFile adresse_fichier.xml

Un objet Stream peut être ouvert à vide puis rempli par un contenu XML par l'intermédiaire de la méthode WriteText.

Objet_Stream.open
Objet_Stream.WriteText Chaîne_XML

L'objet Stream est tout à fait capable de charger un fichier XML non-compatible. Mais si par la suite, il doit être traité par l'objet Recordset, il est necessaire qu'il réponde aux critères exigés par ce-dernier.

Un objet Stream comportant un flux XML, peut servir à ouvrir un Recordset de la même manière qu'un fichier XML.

Objet_Recordset.Source = Objet_Stream

L'objet ASP Request contenant des données XML suite à un traîtement quelconque, peut délivrer son contenu à un objet Recordset ou Stream.

Const adCmdFile = 256
Objet_Recordset.Open Request, , , , adCmdFile

Objet_Stream.open Request
Exemple avec Recordset [voir]
<%@ Language=VBScript %>
<!-- #include file="adovbs.inc" -->
<html>
  <body>
    <%
      Dim i
      Dim Objet_Recordset
      Dim Resultat
      Set Objet_Recordset = Server.CreateObject("ADODB.Recordset")
      Objet_Recordset.CursorLocation = adUseClient
      Objet_Recordset.CursorType = adOpenStatic
      Objet_Recordset.LockType = adLockReadOnly
      fichier = Server.MapPath("livre.xml")
      Objet_Recordset.Source = fichier
      Objet_Recordset.Open

      Resultat = "<table border='1'>"
      Resultat = Resultat & "<tr>"

      For i = 0 to Objet_Recordset.Fields.Count - 1
        Resultat = Resultat & "<th>" & Objet_Recordset.Fields(i).Name & "</th>"
      Next
      Resultat = Resultat & "</tr>"

      Objet_Recordset.MoveNext
      Do While Not Objet_Recordset.EOF
        Resultat = Resultat & "<tr>"

        For i = 0 to Objet_Recordset.Fields.Count - 1
          Resultat = Resultat & "<td>" & Objet_Recordset.Fields(i).Value & "</td>"
        Next

        Objet_Recordset.MoveNext

        Resultat = Resultat & "</tr>"
      Loop

      Resultat = Resultat & "</table>"
    %>
    <%
      Objet_Recordset.Close
      Set Objet_Recordset = Nothing
    %>
    <h1>Contenu de la collection de livres</h1>
    <%= Resultat %>
    <br>
    <hr>
    <h3>Le fichier est située à l'adresse suivante :</h2>
    <blockquote><%= fichier %></blockquote>
  </body>
</html>
Exemple avec Stream [voir]
<%@ Language=VBScript %>
<!-- #include file="adovbs.inc" -->
<html>
  <body>
    <%
      Dim Objet_Stream, Objet_Recordset
      Dim Contenu_XML

      Set Objet_Stream = Server.CreateObject("ADODB.Stream")
      Objet_Stream.Charset = "Windows-1252"
      Objet_Stream.Open
      fichier = Server.mapPath("livre.xml")
      Objet_Stream.LoadFromFile fichier
      Contenu_XML = Objet_Stream.ReadText(adReadAll)

      Objet_Stream.Close

      Set Objet_Stream = Server.CreateObject("ADODB.Stream")
      Objet_Stream.Open
      Objet_Stream.WriteText Contenu_XML
      Objet_Stream.SaveToFile Server.mapPath("livre_copie.xml"), _
                                          adSaveCreateOverWrite

      Set Objet_Recordset = Server.CreateObject("ADODB.Recordset")
      Set Objet_Recordset.ActiveConnection = nothing
      Objet_Recordset.CursorLocation = adUseClient
      Objet_Recordset.CursorType = adOpenStatic
      Objet_Recordset.LockType = adLockReadOnly
      Set Objet_Recordset.Source = Objet_Stream
      Objet_Recordset.Open

      Objet_Stream.Close
      Set Objet_Stream = Nothing

      Resultat = "<table border='1'>"
      Resultat = Resultat & "<tr>"
      For i = 0 to Objet_Recordset.Fields.Count - 1
        Resultat = Resultat & "<td><b>" _
                         & Objet_Recordset.Fields(i).Name & "</b></td>"
      Next
      Objet_Recordset.MoveNext
      Resultat = Resultat & "</tr>"
      Do while not Objet_Recordset.EOF
        Resultat = Resultat & "<tr>"
        For i = 0 to Objet_Recordset.Fields.Count - 1
          Resultat = Resultat & "<td>" _
                           & Objet_Recordset.Fields(i).Value & "</td>"
        Next
        Objet_Recordset.MoveNext
        Resultat = Resultat & "</tr>"
      Loop
      Resultat = Resultat & "</table>"

      Objet_Recordset.Close
      Set Objet_Recordset = Nothing
    %>
    <h1>Contenu de la collection de livres</h1>
    <%= Resultat %>
    <br>
    <hr>
    <h3>Une copie du fichier "<%= fichier %>" 
                             est située à l'adresse suivante :</h2>
    <blockquote>
      <%= Server.mapPath("livre_copie.xml") %>
    </blockquote>
  </body>
</html>
Fichier : livre.xml
<xml 
        xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
        xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
        xmlns:rs="urn:schemas-microsoft-com:rowset"
        xmlns:z="#RowsetSchema">
  <s:Schema id="RowsetSchema">
    <s:ElementType name="row" content="eltOnly">
      <s:AttributeType name="id" rs:number="1"
                              rs:writeunknown="true">
        <s:datatype dt:type="string" dt:maxlength="7"
                          rs:fixedlength="true"
                          rs:maybenull="false"/>
      </s:AttributeType>
      <s:AttributeType name="nom"
                              rs:number="2"
                              rs:writeunknown="true">
        <s:datatype dt:type="string"
                          dt:maxlength="50"
                          rs:maybenull="false"/>
      </s:AttributeType>
      <s:AttributeType name="editeur"
                              rs:number="3"
                              rs:writeunknown="true">
        <s:datatype dt:type="string"
                          dt:maxlength="25"
                          rs:maybenull="false"/>
      </s:AttributeType>
      <s:AttributeType name="commentaire"
                              rs:number="4"
                              rs:writeunknown="true">
        <s:datatype dt:type="string"
                          dt:maxlength="250"
                          rs:maybenull="false"/>
      </s:AttributeType>
      <s:extends type="rs:rowbase"/>
    </s:ElementType>
  </s:Schema>
  <rs:data>
    <z:row id="ASP0012"
              nom="ASP, ADO, and XML Complete" 
              editeur="Sybex" 
              commentaire="Develop dynamic Web applications 
                                    with ASP, ADO and XML."/>
    <z:row id="XSL1207"
              nom="XSLT Programmer's reference"
              editeur="Wrox Press"
              commentaire="This book is for programmers who want 
                                    to learn how to use XSLT language to 
                                    develop web applications."/>
    <z:row id="ASP0342"
              nom="Mastering Active Server Pages 3"
              editeur="Sybex"
              commentaire="This book is Microsoft's technology
                                    for delivering dynamic, interactive
                                    Web applications."/>
    <z:row id="VBS8920"
              nom="Visual Basic Developper's guide to ASP and IIS"
              editeur="Sybex"
              commentaire="This core components of web application 
                                    development for programmers using Microsoft
                                    technologies are ASP and IIS."/>
  </rs:data>
</xml>