Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Langages serveur > ASP
ASP Forum sur la programmation ASP. Avant de poster : Cours ASP, FAQ ASP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/07/2006, 19h16   #1
Invité régulier
 
Inscription : juillet 2006
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 15
Points : 7
Points : 7
Par défaut Récupération de flux xml

Bonjour, alors j'ai un petit probleme en asp pour exploiter un flux xml qui m'est retourner par une requete sql


voici mon code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
dim oConn
dim SQLRequest
dim RecordSet
 
Set oConn = Server.CreateObject("ADODB.Connection")
 
oConn.Open "Driver={SQL Server};" & _ 
           "Server=DB5WYT1J;" & _
           "Database=db_test;"
 
SQLRequest = "select * from MaTable FOR XML PATH('Table')"
 
RecordSet = oConn.Execute(SQLRequest)
voila et une fois que j'arrive ici je ne sais pas comment exploiter RecordSet qui contient le flux xml renvoyer par la requete.

j'ai essayer de faire : set RecordSet = new XMLDocument
pour pouvoir faire ensuite des truc comme RecordSet.selectNodes("Table") mais ca ne marche pas, il y'a une erreur au niveau du "set RecordSet = new XMLDocument"

voila merci pour votre aide
Griffin_2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2006, 20h52   #2
Expert Confirmé Sénior

 
Avatar de Immobilis
 
Inscription : mars 2004
Messages : 5 849
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 5 849
Points : 5 965
Points : 5 965
Salut,

En ASP/VB les objets ne sont pas créés en faisant un "new" mais set xmlDoc=Server.CreateObject("Microsoft.XMLDOM")

Un début là: http://www.w3schools.com/xml/xml_parser.asp ?

A+
Immobilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2006, 15h39   #3
Invité régulier
 
Inscription : juillet 2006
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 15
Points : 7
Points : 7
ok merci
maintenant je n'ai plus d'erreur mais je n'arrive pas a afficher mon flux

voici mon code maintenant :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
oConn.Open "Driver={SQL Server};" & _ 
           "Server=DB5WYT1J;" & _
           "Database=db_test;"
 
dim SQLRequest
SQLRequest = "select * from MaTable FOR XML PATH('Table')"
 
set xmlDoc=Server.CreateObject("Microsoft.XMLDOM")
 
xmlDoc.load(oConn.Execute(SQLRequest))
 
response.Write(xmlDoc.xml)
le souci c'est que ca ne m'affiche rien (meme quand je fait afficher la source)
pourtant quand j'execute la requete "select * from ORCA_FICHE FOR XML PATH('Table')" dans sql server 2005, elle me renvoie bien un resultat du style :
<Table><id>01</id><nom>NomTest</nom></Table><Table><id>02</id><nom>NomTest2</nom></Table>
Griffin_2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2006, 12h08   #4
Membre actif
 
Inscription : mai 2004
Messages : 166
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mai 2004
Messages : 166
Points : 178
Points : 178
peut-être qu'avec loadxml ça marchera mieux
Code :
1
2
 
xmlDoc.loadXml(oConn.Execute(SQLRequest))
amar00 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2006, 17h51   #5
Invité régulier
 
Inscription : juillet 2006
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 15
Points : 7
Points : 7
ba non quand je met un loadXml il me met une erreur:
Code :
1
2
3
4
5
6
 
Erreur d'exécution Microsoft VBScript error '800a000d' 
 
Type incompatible: 'loadXml' 
 
/Default.asp, line 29
Griffin_2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2006, 11h25   #6
Membre actif
 
Inscription : mai 2004
Messages : 166
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mai 2004
Messages : 166
Points : 178
Points : 178
loadxml sert à obtenir une instance DOM à partir d'un flux de texte.
Pour obtenir ce flux de texte.
Code :
1
2
3
4
5
 
set rs = oConn.Execute(SQLRequest))
dim strTexte : strTexte = rs.fields(0).value
.....
xmlDoc.loadXml(strTexte)
amar00 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2006, 17h36   #7
Invité régulier
 
Inscription : juillet 2006
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 15
Points : 7
Points : 7
ok merci j'arrive bien a afficher ce que me renvoie la requete en faisant response.write(strText)

mais je n'arrive toujour pas a afficher le contenue d'un node
j'aimerais par exemple afficher le contenu du node <id> donc je fait :
Code :
1
2
3
4
5
6
7
8
 
set rs = oConn.Execute(SQLRequest)
strTexte = rs.fields(0).value
 
set xmlDoc=Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.loadXml(strTexte)
 
response.Write(xmlDoc.selectSingleNode("id").text)
mais je me retrouve avec une erreur " Objet requis: '[object]' "
a la ligne:
Code :
response.Write(xmlDoc.selectSingleNode("id").text)
Griffin_2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2006, 18h20   #8
Membre actif
 
Inscription : mai 2004
Messages : 166
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mai 2004
Messages : 166
Points : 178
Points : 178
Peux-tu montrer le contenu de strTexte ?
Ca sera plus clair.
amar00 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2006, 18h42   #9
Invité régulier
 
Inscription : juillet 2006
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 15
Points : 7
Points : 7
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<Table>
  <NUM_PMA>PMA_01</NUM_PMA>
  <NUM_VENUE>CHU_01</NUM_VENUE>
  <PAT_NOM>NOMTEST</PAT_NOM>
  <PAT_PRE>PRENOMTEST</PAT_PRE>
</Table>

<Table>
  <NUM_PMA>PMA_02</NUM_PMA>
  <NUM_VENUE>CHU_02</NUM_VENUE>
</Table>
il y'a deux lignes dans mas bd donc deux <Table>
dans le deuxieme <Table> les elements <PAT_NOM> et <PAT_PRE> ne figure pas puisqu'ils on la valeur NULL dans la bd

et mon erreur se produit donc quand je fait un response.write(xmlDoc.selectSingleNode("NUM_PMA").text)
Griffin_2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2006, 04h23   #10
Invité régulier
 
Inscription : avril 2006
Messages : 21
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 21
Points : 9
Points : 9
J'ai un fichier XML et voici comment j'affiche son contenu sur le navigateur
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<%
dim dom, path
path = "C:\NomDossier\NomFichier.xml"
Set dom = Server.createObject("Microsoft.XMLDOM")
dom.async = False
dom.ResolveExternals = False
dom.Load path
%>
<%= dom.xml %>
<%
Set dom = Nothing 
%>
Le texte qui s'affiche sur le navigateur est brut càd qu'il ne contient pas les tags XML <Element></Element>.Je crois que les les propriétés booléennes 'async' et 'ResolveExternals' ont un rôle important dans l'affichage du document(je ne sais pas le quel).Ajoute ces propriétés à ton code avec la valeur 'FALSE' et regarde ce qui se passe A+
Abdou_moujar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2006, 10h28   #11
Membre actif
 
Inscription : mai 2004
Messages : 166
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mai 2004
Messages : 166
Points : 178
Points : 178
ça ne ressemble pas à une chaine xml bien formée, il manque un noeud principal
Maintenant admettons que tu charges la chaine suivante avec loadxml
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<NOEUDPERE>
<Table>
  <NUM_PMA>PMA_01</NUM_PMA>
  <NUM_VENUE>CHU_01</NUM_VENUE>
  <PAT_NOM>NOMTEST</PAT_NOM>
  <PAT_PRE>PRENOMTEST</PAT_PRE>
</Table>
 
<Table>
  <NUM_PMA>PMA_02</NUM_PMA>
  <NUM_VENUE>CHU_02</NUM_VENUE>
</Table>
</NOEUDPERE>
je te proposes de tester le code suivant

D'abord : détection des erreurs de parsing
Code :
1
2
3
4
5
6
7
8
9
 
Dim xmlDoc : set xmlDoc=Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = False 
xmlDoc.loadxml(strText) 
Dim parseErr : Set ParseErr = xmlDoc.parseError 
If ParseErr.errorCode <> 0 Then 
   Response.write("Error Code: " & ParseErr.errorCode) 
   Response.end
End If
Ensuite recup des infos du noeud par exemple NUM_PMA
Code :
1
2
3
4
Dim oNode
Set oNode= xmlDoc.documentElement.selectSingleNode("Table/NUM_PMA") 
response.write(oNode.text)
amar00 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2006, 18h15   #12
Invité régulier
 
Inscription : juillet 2006
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 15
Points : 7
Points : 7
ca y'est !!!

@Abdou_moujar : j'ai essayer en rejoutant ce que tu m'a dis de mettre mais ce n'était pas suffisant

@amar00 : j'ai rajouter le <NOEUDPERE> à strText et j'ai mis ton code e tca marche, j'arrive bien a accéeder à ce que je veu.

Donc ca devait venir de mon flux xml qui était mal formé et surement aussi du fait que je n'utiliser pas "documentElement"

Alors merci bcp a tous, vous m'avez bien aider .
Griffin_2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h30.


 
 
 
 
Partenaires

Hébergement Web