begin process at 2012 02 14 03:48:54
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

XML

 > BASE DE DONNÉ BDD VERS XML : CONVERSION D'UN RECORDSET VERS UN FLUX XML

BASE DE DONNÉ BDD VERS XML : CONVERSION D'UN RECORDSET VERS UN FLUX XML


 Information sur la source

Note :
Aucune note
Catégorie :XML Classé sous :bdd, recordset, xml, basededonnées, generer Niveau :Débutant Date de création :26/06/2007 Date de mise à jour :11/07/2007 16:29:50 Vu :8 872

Auteur : pifou25

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note


 Description

Ce que fait le code:
1° connexion à la BDD (ODBC mais ça peut être n'importe quoi)
2° création de la requête et du recordset
3° génération du XML à la volée, sur tous les champs de tous les enregistrements.

Personnalisez (osez! tunez!) la connexion ainsi que la requête SQL, et le tour est joué!
En option, il est possible de rajouter un (des) arguments pour filtrer la requête (2eme partie)

En option aussi, l'argument attr qui permet de passer les champs en tant qu'attributs:
<item nom1="valeur1" nom2="val2" /> ...
au lieu de:
<item>
<valeur1>nom1</valeur1>
<val2>nom2</ val2>
</item> ...

Source

  • <%
  • ' connexion ODBC + recordset
  • Set Conn=Server.createobject("ADODB.Connection")
  • Conn.open "Data source=nom_ODBC; User Id=nom_utilisateur; PASSWORD="
  • Set rs=Server.createobject("ADODB.Recordset")
  • ' création de la requête
  • rs.open "SELECT * FROM nom_de_la_table", Conn
  • ' génération du résultat sous format XML
  • dim i, j, lstFields(), attr
  • if isempty(request("attr")) then attr=false else attr=true
  • Response.ContentType="text/XML"
  • Response.write("<?xml version=""1.0"" encoding=""ISO-8859-1"" standalone=""yes""?>")
  • Response.write("<items>")
  • if rs.eof then
  • Response.write("<error>Aucun résultat</error>")
  • else
  • do until rs.eof
  • if attr then
  • Response.write("<item ")
  • for j = 0 to i
  • Response.write(lstFields(j) & "=""" & rs(j).value & """ ")
  • next
  • Response.write("/>" & vbcr)
  • else
  • Response.write("<item>" & vbcr)
  • for j = 0 to i
  • Response.write("<" & lstFields(j) & ">" & rs(j).value & "</" & lstFields(j) & ">" & vbcr)
  • next
  • Response.write("</item>" & vbcr)
  • end if
  • rs.movenext
  • loop
  • rs.close
  • end if
  • Response.write("</items>")
  • Set rs=nothing
  • Set Conn=nothing
  • %>
  • <%
  • ' 2eme VERSION : fournir un argument sur l'appel de cette page (?id=55 ...)
  • ' connexion ODBC + recordset
  • Set Conn=Server.createobject("ADODB.Connection")
  • Conn.open "Data source=nom_ODBC; User Id=nom_utilisateur; PASSWORD="
  • Set rs=Server.createobject("ADODB.Recordset")
  • ' création de la requête
  • if isempty(request("id")) then var_id=0 else var_id=request("id")
  • rs.open "SELECT * FROM nom_de_la_table WHERE nom_de_la_colonne=" & var_id, Conn
  • ' génération du résultat sous format XML
  • Response.ContentType="text/XML"
  • Response.write("<?xml version=""1.0"" encoding=""ISO-8859-1"" standalone=""yes""?>")
  • Response.write("<items>")
  • if rs.eof then
  • Response.write("<error>Aucun résultat</error>")
  • else
  • do until rs.eof
  • Response.write(" <item>")
  • for each fld in rs.fields
  • Response.write("<" & fld.name & ">" & fld.value & "</" & fld.name & ">")
  • next
  • Response.write(" </item>")
  • rs.movenext
  • loop
  • rs.close
  • end if
  • Response.write("</items>")
  • Set rs=nothing
  • Set Conn=nothing
  • %>
<%
' connexion ODBC + recordset
Set Conn=Server.createobject("ADODB.Connection")
Conn.open "Data source=nom_ODBC; User Id=nom_utilisateur; PASSWORD="
Set rs=Server.createobject("ADODB.Recordset")

' création de la requête
rs.open "SELECT * FROM nom_de_la_table", Conn

' génération du résultat sous format XML
dim i, j, lstFields(), attr
if isempty(request("attr")) then attr=false else attr=true

Response.ContentType="text/XML"
Response.write("<?xml version=""1.0"" encoding=""ISO-8859-1"" standalone=""yes""?>")
Response.write("<items>")
if rs.eof then
	Response.write("<error>Aucun résultat</error>")
else
	do until rs.eof
		if attr then	
			Response.write("<item ")
			for j = 0 to i
				Response.write(lstFields(j) & "=""" & rs(j).value & """ ")
			next
			Response.write("/>" & vbcr)
		else
			Response.write("<item>" & vbcr)
			for j = 0 to i
				Response.write("<" & lstFields(j) & ">" & rs(j).value & "</" & lstFields(j) & ">" & vbcr)
			next
			Response.write("</item>" & vbcr)
		end if
		rs.movenext
	loop
	rs.close
end if
Response.write("</items>")
Set rs=nothing
Set Conn=nothing
%>


<%
' 2eme VERSION : fournir un argument sur l'appel de cette page  (?id=55 ...)
' connexion ODBC + recordset
Set Conn=Server.createobject("ADODB.Connection")
Conn.open "Data source=nom_ODBC; User Id=nom_utilisateur; PASSWORD="
Set rs=Server.createobject("ADODB.Recordset")

' création de la requête
if isempty(request("id")) then var_id=0 else var_id=request("id")
rs.open "SELECT * FROM nom_de_la_table WHERE nom_de_la_colonne=" & var_id, Conn

' génération du résultat sous format XML
Response.ContentType="text/XML"
Response.write("<?xml version=""1.0"" encoding=""ISO-8859-1"" standalone=""yes""?>")
Response.write("<items>")
if rs.eof then
	Response.write("<error>Aucun résultat</error>")
else
	do until rs.eof
		Response.write("  <item>")
		for each fld in rs.fields
			Response.write("<" & fld.name & ">" & fld.value & "</" & fld.name & ">")
		next
		Response.write("  </item>")
		rs.movenext
	loop
	rs.close
end if
Response.write("</items>")
Set rs=nothing
Set Conn=nothing
%>

 Conclusion

inconvénient: le fichier porte quand même l'extension .asp (sauf à reconfigurer le serveur IIS je suppose que c'est possible mais bon)... à priori c'est réglé: grâce à cette instruction qui permet de reconnaitre le flux comme un XML : Response.ContentType="text/XML"

avantage: mise à jour dynamique d'une liste ou un tableau par exemple...

note: pour le 1er exemple penser à limiter le nombre d'enregistrements: SELECT TOP 30 * FROM ... (par exemple pour les 30 premières lignes) sinon le script renvoie l'intégralité de la table. Limiter aussi le nombre de champs.


 Historique

27 juin 2007 10:31:42 :
ajout du Response.ContentType="text/XML" + Charset sur les conseils de Roro
11 juillet 2007 16:29:50 :
option "attr" pour générer les champs et valeurs en tant qu'attibuts du noeud <item /> au lieu de noeuds-enfants.

 Sources de la même categorie

AJOUTER UN NOEUD DANS UN FICHIER XML DÉJÀ EXISTANT par pkzip
Source .NET (Dotnet) GÉNÉRATION D'UN XML À PARTIR D'UNE BDD ACCESS par fabienfs
Source avec Zip LECTEUR DE FLUX RSS OBJET par Yoyo2B
Source avec Zip Source .NET (Dotnet) TRANSFORMATION XSLT POUR OBTENIR DU CODE XTML VALIDE À INTÉG... par saizonou
Source avec Zip Source .NET (Dotnet) EXÉCUTER UN SCRIPT VB.NET LORS D’UNE TRANSFORMATION XSLT par tikrimi

 Sources en rapport avec celle ci

AJOUTER UN NOEUD DANS UN FICHIER XML DÉJÀ EXISTANT par pkzip
Source avec Zip Source avec une capture Source .NET (Dotnet) UN SEMBLANT DE MASTERPAGE POUR DES FICHIERS XSL par bizzard4
Source avec Zip Source .NET (Dotnet) CLASSE DE GESTION SQL POUR MS ACCESS par bizzard4
CONVERSION D'UNE DATE/HEURE STANDARD VERS DATE/HEURE CONFORM... par processus
Source avec Zip Source avec une capture Source .NET (Dotnet) CRÉATION D'UN FICHIER EXCEL 2007 EN UTILISANT OPENXML EST XS... par tikrimi

Commentaires et avis

Commentaire de pifou25 le 26/06/2007 17:44:52

(je commente mon propre script!)
En fait, mon but avec ce mini script était de faire une liste (déroulante ou pas, listbox ou combobox) dans une page HTML qui serait alimentée grâce à javascript et un chargement de données XML de ce genre. Accessoirement, une liste peut ainsi être mise à jour automatiquement sur sélection d'autres boutons alentour. Si je ne trouve pas de scripts correspondant je suppose que je devrais le faire moi même mais si vous avez une piste je suis preneur! merci :)

Commentaire de roro06 le 27/06/2007 09:51:30

Bonjour

Il manque quelquechose de primordial dans cette source, ce qui la rend inexploitable, particulièrement dans le cas de traitement "ajax", c'est

response.ContentType="text/XML"

Qui indique au navigateur le type de réponse.

Accessoirement, on peut rajouter également :
response.Charset="iso-8859-1" ( ou UTF-8, ou autre)
De plus, mais c'est à vérifier, pour un flux XML, je pense que l'ajout des vbcrlf est non seulement inutile, mais risque de rendre ton flux non valide.

Cordialement
Roro

Commentaire de Patrice99 le 27/06/2007 10:25:13

Salut, si tu précises l'encoding, alors il est inutile de préciser le charset. Par ailleurs, vbCrLf ne perturbe pas du tout xml, car les espaces et les sauts de ligne en dehors des balises sont toujours ignorées, je l'ai vérifié. L'encoding est nécessaire dès qu'au moins un champ texte contient un caractère (par exemple un simple accent é) qui ne peut pas être codé dans l'encoding international par défaut.

Commentaire de pifou25 le 27/06/2007 10:34:24

ouah t'a bien raison! ça marche pas mal mieux maintenant ^^ IE interpretait automatiquement comme du XML mais pas Firefox, tandis que maintenant si. Du coup j'ai viré les vbcrlf (pourtant un simple retour à la ligne) plus nécessaire à la visualisation.
merci!
Pifou

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Créer un xml [ par cmjn ] CMJNBonjourJ'ai monté une BDD en asp qui récupère des données texte et transfert des images sur un serveur. J'aimerais créer un xml répertoriant mes i Recupération d'images d'une bdd access [ par djh3o ] comment recupérer en asp une image ole d'une bdd access sachant k'elle est dans mon recordset.. mais je n'arrive pas a l'afficher...j'ai fait deux pag Recuperation de donnée d'un fichier xml pour ajouter dans une BDD sql server 2000. [ par nicko59 ] Amis du jour, bonjour,Bon, voila, j'ai un p'tit soucis...je n'arrive pas &#224; r&#233;cup&#233;rer les bonnes donn&#233;es de mot fichier xml...en fa Génération d'XML avec ASP.net via une BDD [ par fabienfs ] Bonjour, J'ai conçu une galerie produits en Flash et j'ai besoin de récupérer dynamiquement des donnés via du XML. Pour l'instant mes données sont don Remplir un dataset avec un XML [ par kaygee ] Salutj'ai un petit souci, j'essaye de remplir un dataset avec mon XML, mais il me répond root element is missing, <b élément xml vide [ par tortuedu74 ] Bonjour, Je voudrais savoir comment tester un élément vide.Par exemple:mon XML:&lt;a&gt;    &lt;Items&gt;      &lt;Item&gt;Test avec une entite: &amp; multiple xml datagrid [ par cailloux79 ] est-il possible d'afficher plusieurs fichiers xml dans un datagrid en flex? Suppression dans un fichier xml [ par debladz ] Bonjour,Pour les besoin d'une application, je récupère des données d'un fichier XML et je les affiche dans un gridview.Jusque là, pas de soucis.Je réu Fichier access volumineux [ par CptDuff ] Bonjour à tous donc voila je suis entrain de créer une BDD sous access 2000 et ma base n'est même pas renseigné qu'elle fait déjà 100Mo. J'ai remarqué service web [ par dodofolie ] Salut tt le monde voila g une question a propos de l'appel du service web ds une page web(il faut que j'affiche les employes dans une liste d'un proje


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,151 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales