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 :

Parser un XML provenant d'un webserviceSOAP


Sujet :

ASP

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2009
    Messages : 53
    Points : 24
    Points
    24
    Par défaut Parser un XML provenant d'un webserviceSOAP
    Bonjour à tous.

    Après plusieurs jours d'essais infructueux je me tourne vers vous pour mon problème :
    Je dois interagir avec un webservice SOAP (wsdl).
    J'ai réussi à envoyer ma requête et récupérer le XML qui va bien.
    Cependant impossible de le parser correctement, ou en tout cas de récupérer une donnée dans une string.

    Pour me connecter j'utilise ce code (qui fonctionne) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Dim oXmlHTTP, SOAPRequest, myXML
     
    Set oXmlHTTP = CreateObject("Microsoft.XMLHTTP")
    Set myXML =Server.CreateObject("Microsoft.XMLDOM") 
     
    myXML.Async=False 
    oXmlHTTP.Open "GET", "http://intraweb.xxxxx.com/ReferentialDataWS_v4.0/services/SecureAxisWrapperRefDataPersonGroupService", False, _
    				"XXXXX", "XXXXX"
     
    oXmlHTTP.setRequestHeader "Content-Type", "application/soap+xml; charset=utf-8" 
    oXmlHTTP.setRequestHeader "SOAPAction", "http://intraweb.xxxx.com/ReferentialDataWS_v4.0/services/SecureAxisWrapperRefDataPersonGroupService"
     
    SOAPRequest = _  
      "<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:all=""http://all.service.XXXXX.com"">" &_
       "<soapenv:Header/>" &_
      " <soapenv:Body>"&_
      "    <all:getPersonBySgid>"&_
      "       <all:sgid>XXXXXXX</all:sgid>"&_
      "    </all:getPersonBySgid>"&_
       "</soapenv:Body>"&_
    "</soapenv:Envelope>"
     
      oXmlHTTP.send SOAPRequest
     
      Response.Write "<xmp>"
      Response.Write oXmlHTTP.responseXML.xml
      myXML = oXmlHTTP.responseXML.xml
      Response.Write "</xmp>"
    Ici je dois mettre les balises <xmp> sinon la sortie ne me donne que les données concaténées, sans les balises XML.
    Voici ce qui ressort, une fois mis en forme (raccourci) :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?xml version="1.0" encoding="utf-8"?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <soapenv:Body>
        <getPersonBySgidResponse xmlns="http://all.service.xxxxx.com">
          <getPersonBySgidReturn>
            <alternateContactSgi xsi:nil="true"/>
            <birthDate>1986-11-14T22:00:00.327Z</birthDate>
            <birthDateOkay>true</birthDateOkay>
            <branchId>B78</branchId>
            <businessGroupId>R78E</businessGroupId>
            <contractEndDate xsi:nil="true"/>
            <contractStartDate>2013-09-16T22:00:00.327Z</contractStartDate>
            <contractorCompanyName xsi:nil="true"/>
            <countryId>FRA</countryId>
            <delegationId>DLFRA</delegationId>
            <departmentName>xxx</departmentName>
            <departmentNumber>XXXXX</departmentNumber>
            <detailed>true</detailed>
            <divisionName>XXXXO -  SIEGE SOCIAL</divisionName>
            <divisionNumber>31346</divisionNumber>
            <educationCompound xsi:nil="true"/>
            <employeePosition>N</employeePosition>
            <employeePositionLocal xsi:nil="true"/>
            <faxNumber xsi:nil="true"/>
            <filiereId>ADM</filiereId>
            <firstname>Lakhdar</firstname>
            <firstnameEncoded xsi:nil="true"/>
            <firstnamePreferred xsi:nil="true"/>
            <fullName>Lakhdar XXXX</fullName>
            <inChargeSgiJuridic xsi:nil="true"/>
            <inChargeSgiMission xsi:nil="true"/>
          </getPersonBySgidReturn>
        </getPersonBySgidResponse>
      </soapenv:Body>
    </soapenv:Envelope>

    Donc tout semble normal (n'est-ce pas ? Peut être déjà une erreur ici ? )

    Voici le code que j'utilise pour tenter de parser le XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Dim objXML,objRoot ,I, thisNode,strID, strNarrative, thisChild, selectedNode,testStr
     
    	Set objXML= Server.CreateObject("MSXML2.DOMDocument") 
    	objXML.async = False 	
     
    	objXML.setProperty "SelectionLanguage", "XPath"	
    	objXML.setProperty "SelectionNamespaces", "xmlns='http://all.service.xxxxx.com' " & _
    		"xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' " & _
    		"xmlns:xsd='http://www.w3.org/2001/XMLSchema' " & _
    		"xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "
     
    	objXML.loadXML(myXML) 
    	Set selectedNode= objXML.selectSingleNode("//soapenv:Envelope/soapenv:Body/getPersonBySgidResponse/getPersonBySgidReturn/getPersonBySgidReturn/divisionName")
     
    	Set objRoot = objXML.documentElement 
     
    	Response.Write "<br/> myXml == "  &  myXML
    	Response.Write "<br/> objXML == "  &  objXML.Text	
    	Response.Write "<br/> objRoot == "  &  objRoot.Text
    	Response.Write "<br/> selectedNode == "  &  selectedNode.Text
    Et là dans une page qui relève les erreurs j'ai un joli :
    "line 68 : Object required " (ligne qui correspond ici à la dernière ligne)...

    J'ai tenté plusieurs méthodes pour le "selectedNode" en argument (juste le nom de l'attribut final, le chemin pas entier etc...) sans succès.

    Peut être quelqu'un ici verra (enfin) ce qui cloche ?

    Merci de m'avoir lu

  2. #2
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    1 616
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 616
    Points : 3 965
    Points
    3 965
    Par défaut
    salut

    ligne 14 :
    Set selectedNode= objXML.selectSingleNode("//soapenv:Envelope/soapenv:Body/getPersonBySgidResponse/getPersonBySgidReturn/getPersonBySgidReturn/divisionName"
    tu as 2 fois de suite getPersonBySgidReturn
    Émotion
    Infantilisation
    Culpabilisation

    Christophe Alévèque - 18 Mars 2021

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2009
    Messages : 53
    Points : 24
    Points
    24
    Par défaut
    Hello, en fait je l'avais vu et corrigé avant de créer mon post mais oublier de le faire dans mon copier/coller
    Donc même avec un seul, toujours la même erreur... Le selectedNode n'est pas nul (j'ai ajouté un If isnull) et si j'enlève le ".text" à "Response.write selectedNode.Text" il me met "Missing default property" (ce qui me semble normal)....
    Je ne sais plus du tout quoi tenter.

  4. #4
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Points : 1 978
    Points
    1 978
    Par défaut
    Bonjour

    peut-être ?


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2009
    Messages : 53
    Points : 24
    Points
    24
    Par défaut
    J'y ai presque cru... mais non
    Je ne vois vraiment pas. j'ai testé en local (en enregistrant le XML dans un fichier pour être sûr que ça ne vient pas de la string que me renvoi le webservice) mais toujours pareil.
    Je patauge complètement là.

  6. #6
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Points : 1 978
    Points
    1 978
    Par défaut
    a priori, c'est un objet node

    as tu vu cette doc ?


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2009
    Messages : 53
    Points : 24
    Points
    24
    Par défaut
    Oui oui j'avais trouvé cette page.
    En fait je viens d'enregistrer le contenu de l'XML dans un fichier pour le parser en C#, un truc tout simple.

    Je charge le fichier et je crée une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlNode selectednode = myDoc.SelectSingleNode("/soapenv:Envelope/soapenv:Body", manager);
    Ici la variable selectedNode contient bien le noeud. Mais ceci ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlNode selectednode = myDoc.SelectSingleNode("/soapenv:Envelope/soapenv:Body/getPersonBySgidResponse", manager);
    En effet dans ce cas le selectedNode est null !

    Un problème de XML peut être ? Je l'ai testé sur le site W3C il ne semblait pas y avoir d'erreur...

  8. #8
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2009
    Messages : 53
    Points : 24
    Points
    24
    Par défaut
    Bon,
    Au troisième niveau du XML j'ai enlevé le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlns="http://all.service.xxxxx.com"
    Et là ça fonctionne !
    Cet attribut est-il indispensable à la lecture du XML ?

  9. #9
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Cet attribut est-il indispensable à la lecture du XML ?
    D'abord "Cet attribut" n'est pas proprement parlé un attribut : c'est une déclaration de namspace et dans ce cas une déclaration de namespace dit défaut. Si il est indispensable ou non, ce n'est certainement pas à votre déliberation en tant qu'un consommateur d'une service web en question : c'est le fournisseur qui décide et le consommateur se conforme sur la décision.

    Pour faire des requêtes xpath proprement, on fait comme si il est un namespace prefixé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	'rajouter un préfixe, dit x, pour l'instance
    	objXML.setProperty "SelectionNamespaces", "xmlns:x='http://all.service.xxxxx.com' " & _
    		"xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' " & _
    		"xmlns:xsd='http://www.w3.org/2001/XMLSchema' " & _
    		"xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "
    Puis la requête se construit comme si les éléments sont préfixés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	Set selectedNode= objXML.selectSingleNodeM("//soapenv:Envelope/soapenv:Body/x:getPersonBySgidResponse/x:getPersonBySgidReturn/x:divisionName")
    Pareilles pour les autres si il y en a.

  10. #10
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2009
    Messages : 53
    Points : 24
    Points
    24
    Par défaut
    @tsuji : MERCI !!
    ça m'ennuyait quand même très fortement cette histoire de supprimer quelque chose du XML comme ça... mais ta méthode fonctionne parfaitement !
    Tu m'enlèves une énorme épine du pied merci encore !

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

Discussions similaires

  1. [XML] Parser un shema XML provenant d'une réponse SOAP
    Par acidline dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 05/05/2010, 11h40
  2. [C#] Parser du XML
    Par karl3i dans le forum Windows Forms
    Réponses: 5
    Dernier message: 27/02/2009, 09h46
  3. parser un flux xml provenant d'une anim flash
    Par pyd001 dans le forum Langage
    Réponses: 3
    Dernier message: 11/07/2006, 10h43
  4. [FLASH MX2004] Parser un XML en action script
    Par jejeman dans le forum Flash
    Réponses: 6
    Dernier message: 20/09/2005, 17h25
  5. [XSL] Parser fichier xml : erreurs + incompréhensions
    Par totobouchon dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 19/07/2005, 15h47

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