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
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 15
    Points : 11
    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
    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 506
    Points
    9 506
    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+
    "Winter is coming" (ma nouvelle page d'accueil)

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 15
    Points : 11
    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
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 166
    Points : 189
    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
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 15
    Points : 11
    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
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 166
    Points : 189
    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
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 15
    Points : 11
    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
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 166
    Points : 189
    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
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 15
    Points : 11
    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
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 35
    Points : 30
    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
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 166
    Points : 189
    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
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 15
    Points : 11
    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, 15h13
  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, 14h08
  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, 11h03
  4. [FTP] Récupération de flux xml
    Par Alcohollica dans le forum Langage
    Réponses: 2
    Dernier message: 13/03/2007, 09h01
  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, 13h54

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