Base de donné bdd vers xml : conversion d'un recordset vers un flux xml

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 598 fois - Téléchargée 21 fois

Contenu du snippet

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 / Exemple :


<%
' 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.

A voir également

Ajouter un commentaire Commentaires
pifou25 Messages postés 144 Date d'inscription lundi 13 octobre 2003 Statut Membre Dernière intervention 21 décembre 2014
27 juin 2007 à 10:34
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
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
27 juin 2007 à 10:25
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.
cs_roro06 Messages postés 732 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007
27 juin 2007 à 09:51
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
pifou25 Messages postés 144 Date d'inscription lundi 13 octobre 2003 Statut Membre Dernière intervention 21 décembre 2014
26 juin 2007 à 17:44
(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 :)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.