IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP Discussion :

Récupération de flux xml


Sujet :

ASP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    15
    Points
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 15
    Points : 11
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Points
    9 512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Par défaut
    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+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    15
    Points
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 15
    Points : 11
    Par défaut
    ok merci
    maintenant je n'ai plus d'erreur mais je n'arrive pas a afficher mon flux

    voici mon code maintenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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>

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    166
    Points
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 166
    Points : 189
    Par défaut
    peut-être qu'avec loadxml ça marchera mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    xmlDoc.loadXml(oConn.Execute(SQLRequest))

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    15
    Points
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 15
    Points : 11
    Par défaut
    ba non quand je met un loadXml il me met une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Erreur d'exécution Microsoft VBScript error '800a000d' 
     
    Type incompatible: 'loadXml' 
     
    /Default.asp, line 29

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    166
    Points
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 166
    Points : 189
    Par défaut
    loadxml sert à obtenir une instance DOM à partir d'un flux de texte.
    Pour obtenir ce flux de texte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    set rs = oConn.Execute(SQLRequest))
    dim strTexte : strTexte = rs.fields(0).value
    .....
    xmlDoc.loadXml(strTexte)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    15
    Points
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 15
    Points : 11
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    response.Write(xmlDoc.selectSingleNode("id").text)

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    166
    Points
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 166
    Points : 189
    Par défaut
    Peux-tu montrer le contenu de strTexte ?
    Ca sera plus clair.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    15
    Points
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 15
    Points : 11
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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)

  10. #10
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    35
    Points
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 35
    Points : 30
    Par défaut
    J'ai un fichier XML et voici comment j'affiche son contenu sur le navigateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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+

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    166
    Points
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 166
    Points : 189
    Par défaut
    ç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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim oNode
    Set oNode= xmlDoc.documentElement.selectSingleNode("Table/NUM_PMA") 
    response.write(oNode.text)

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    15
    Points
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 15
    Points : 11
    Par défaut
    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 .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. récupération données flux XML
    Par omelhor dans le forum Langage
    Réponses: 0
    Dernier message: 10/01/2011, 16h13
  2. [SimpleXML] Récupération données flux xml
    Par antitrust56 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 22/11/2007, 15h08
  3. Question de récupération de flux XML
    Par imhotep_zr7s dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 23/10/2007, 12h03
  4. [FTP] Récupération de flux xml
    Par Alcohollica dans le forum Langage
    Réponses: 2
    Dernier message: 13/03/2007, 10h01
  5. Webservice : récupération, formatage flux XML
    Par romain_paris dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 31/10/2005, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo