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.
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émasDé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.
Exemple avec Recordset [voir]Const adCmdFile = 256 Objet_Recordset.Open Request, , , , adCmdFile Objet_Stream.open Request
<%@ 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> |
<%@ 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> |