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 10/06/2008, 16h15   #1
Membre chevronné
 
Avatar de ryan
 
Inscription : juin 2003
Messages : 766
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 766
Points : 760
Points : 760
Par défaut Lire un flux XML

Yop!

Voici la situation: j'ai des clients qui envoient des données XML sur une page ASP. Cette page lit les données et les sauve dans une BDD.

Les clients utilisent ce genre de code pour envoyer les données:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
  set objSrvHTTP = Server.CreateObject ("Msxml2.ServerXMLHTTP.3.0")  
  set objXMLSend = Server.CreateObject("Microsoft.XMLDOM")
 
   objXMLSend.async = false
 
   objXMLSend.load (server.mapPath("test1.xml"))
 
   objSrvHTTP.open "POST","http://le_nom_du_site/readxml.asp",false
   objSrvHTTP.send (objXMLSend)
 
  set objSrvHTTP = Nothing
  set objXMLSend = Nothing
La page readxml.asp doit donc être capable de lire le flux XML. Pour l'instant, j'ai cette solution qui fonctionne, mais je me demande si il n'existe pas un moyen plus élégant.
Code :
1
2
3
4
5
6
7
8
9
 
   thestring = ""
   thearray = request.BinaryRead(Request.TotalBytes)
   for i = 1 to lenB(thearray)
     thestring = thestring & Chr(AscB(MidB(thearray, i, 1)))
   next
 
   set objXML = Server.CreateObject("Microsoft.XMLDOM")   
   objXML.loadXML (thestring )
J'ai passé ma journée à fouiller dans les méthodes et propriétés des objets XML (ServerXMLHTTP et XMLDOM), mais je n'ai rien trouvé qui pourrait remplacer le code que j'utilise pour l'instant.
ryan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2008, 18h18   #2
Expert Confirmé Sénior

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

Bah, le code est assez simple et si ça marche mieux vaut le laisser tel quel. De plus je crois pas qu'il y ait bcp d'autres façons de faire.

Il faudrait aussi que l'envoi soit fait de manière élégante. C'est pas vraiment des façons de balancer du XML comme ça.

Ce qui serait élégant serait de faire cela en .Net, mais bon.

A+
Immobilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2008, 20h11   #3
Membre chevronné
 
Avatar de ryan
 
Inscription : juin 2003
Messages : 766
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 766
Points : 760
Points : 760
Yop!

Citation:
Bah, le code est assez simple et si ça marche mieux vaut le laisser tel quel. De plus je crois pas qu'il y ait bcp d'autres façons de faire.
En tout cas, je n'ai rien trouvé de mieux jusqu'ici. J'aurais pourtant bien aimé lire tout le XML en une fois, et ne pas avoir cette boucle. Quand il y a beaucoup de données, ça rame un peu...

Citation:
C'est pas vraiment des façons de balancer du XML comme ça.
Heu, tu l'enverrais comment?

Citation:
Ce qui serait élégant serait de faire cela en .Net, mais bon.
Je n'ai pas vraiment le choix: je fais évoluer une application qui tourne déjà depuis pas mal d'années et une ré-écriture en dot net n'est pas envisagée.
ryan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2008, 22h45   #4
Expert Confirmé Sénior

 
Avatar de Immobilis
 
Inscription : mars 2004
Messages : 5 862
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 5 862
Points : 5 982
Points : 5 982
Citation:
Envoyé par ryan Voir le message
Heu, tu l'enverrais comment?
Tu peux faire un httprequest en passant la chaine de caractères de ton xml dans une variable. Et le récupérer par un request.form, non? Sauf peut-être si le XML fait plusieurs mégas.

A+
Immobilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2008, 17h36   #5
Membre chevronné
 
Avatar de ryan
 
Inscription : juin 2003
Messages : 766
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 766
Points : 760
Points : 760
Yop!

Citation:
Envoyé par Immobilis Voir le message
Tu peux faire un httprequest en passant la chaine de caractères de ton xml dans une variable. Et le récupérer par un request.form, non? Sauf peut-être si le XML fait plusieurs mégas.
Le problème est que chaque client envoie des données depuis sa propre application, dont je ne connais rien. La page d'envois des données que j'ai montrée ici est un code générique que j'ai écrit pour tester la page qui lit les données.

En utilisant request.BinaryRead, je suis certain de lire les données, quel que soit le code que le client utilise pour les envoyer.

J'aurais aussi préféré passer par le request.form, mais bon, ça a déjà été un jeu du tonnerre de Zeus pour les mettre d'accord sur un format de données, fallait pas leur en demander plus

En tout cas, merci de m'avoir répondu.
ryan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2008, 22h29   #6
Expert Confirmé Sénior

 
Avatar de Immobilis
 
Inscription : mars 2004
Messages : 5 862
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 5 862
Points : 5 982
Points : 5 982
Je suis un peu confronté au mm pb en ce moment.
Nous avons aussi plusieurs flux de données différents les uns des autres.

En dehors de parvenir à les lire, il faut ensuite les interpréter et les traiter. Chaque format étant différent, j'ai l'impression que cela va être assez difficile.

Heureusement, en utilisant .Net c'est un peu plus facile une fois que les objets sont créés.

A+
Immobilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h43.


 
 
 
 
Partenaires

Hébergement Web