[ASP] Parser un XML provenant d'un webserviceSOAP

Parser un XML provenant d'un webserviceSOAP [ASP] - ASP - Programmation

Marsh Posté le 04-02-2014 à 16:18:42    

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 :
  1. Dim oXmlHTTP, SOAPRequest, myXML
  2. Set oXmlHTTP = CreateObject("Microsoft.XMLHTTP" )
  3. Set myXML =Server.CreateObject("Microsoft.XMLDOM" )
  4. myXML.Async=False
  5. oXmlHTTP.Open "GET", "http://intraweb.xxxxx.com/ReferentialDataWS_v4.0/services/SecureAxisWrapperRefDataPersonGroupService", False, _
  6.    "XXXXX", "XXXXX"
  7. oXmlHTTP.setRequestHeader "Content-Type", "application/soap+xml; charset=utf-8"
  8. oXmlHTTP.setRequestHeader "SOAPAction", "http://intraweb.xxxx.com/ReferentialDataWS_v4.0/services/SecureAxisWrapperRefDataPersonGroupService"
  9. SOAPRequest = _ 
  10.   "<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:all=""http://all.service.XXXXX.com"">" &_
  11.    "<soapenv:Header/>" &_
  12.   " <soapenv:Body>"&_
  13.   "    <all:getPersonBySgid>"&_
  14.   "       <all:sgid>XXXXXXX</all:sgid>"&_
  15.   "    </all:getPersonBySgid>"&_
  16.    "</soapenv:Body>"&_
  17. "</soapenv:Envelope>"
  18.  
  19.   oXmlHTTP.send SOAPRequest
  20.   Response.Write "<xmp>"
  21.   Response.Write oXmlHTTP.responseXML.xml
  22.   myXML = oXmlHTTP.responseXML.xml
  23.   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 :
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <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">
  3.   <soapenv:Body>
  4.     <getPersonBySgidResponse xmlns="http://all.service.xxxxx.com">
  5.       <getPersonBySgidReturn>
  6.         <alternateContactSgi xsi:nil="true"/>
  7.         <birthDate>1986-11-14T22:00:00.327Z</birthDate>
  8.         <birthDateOkay>true</birthDateOkay>
  9.         <branchId>B78</branchId>
  10.         <businessGroupId>R78E</businessGroupId>
  11.         <contractEndDate xsi:nil="true"/>
  12.         <contractStartDate>2013-09-16T22:00:00.327Z</contractStartDate>
  13.         <contractorCompanyName xsi:nil="true"/>
  14.         <countryId>FRA</countryId>
  15.         <delegationId>DLFRA</delegationId>
  16.         <departmentName>xxx</departmentName>
  17.         <departmentNumber>XXXXX</departmentNumber>
  18.         <detailed>true</detailed>
  19.         <divisionName>XXXXO -  SIEGE SOCIAL</divisionName>
  20.         <divisionNumber>31346</divisionNumber>
  21.         <educationCompound xsi:nil="true"/>
  22.         <employeePosition>N</employeePosition>
  23.         <employeePositionLocal xsi:nil="true"/>
  24.         <faxNumber xsi:nil="true"/>
  25.         <filiereId>ADM</filiereId>
  26.         <firstname>Lakhdar</firstname>
  27.         <firstnameEncoded xsi:nil="true"/>
  28.         <firstnamePreferred xsi:nil="true"/>
  29.         <fullName>Lakhdar XXXX</fullName>
  30.         <inChargeSgiJuridic xsi:nil="true"/>
  31.         <inChargeSgiMission xsi:nil="true"/>
  32.       </getPersonBySgidReturn>
  33.     </getPersonBySgidResponse>
  34.   </soapenv:Body>
  35. </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 :
  1. Dim objXML,objRoot ,I, thisNode,strID, strNarrative, thisChild, selectedNode,testStr
  2. Set objXML= Server.CreateObject("MSXML2.DOMDocument" )
  3. objXML.async = False
  4. objXML.setProperty "SelectionLanguage", "XPath"
  5. objXML.setProperty "SelectionNamespaces", "xmlns='http://all.service.xxxxx.com' " & _
  6.  "xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' " & _
  7.  "xmlns:xsd='http://www.w3.org/2001/XMLSchema' " & _
  8.  "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "
  9. objXML.loadXML(myXML)
  10. Set selectedNode= objXML.selectSingleNode("//soapenv:Envelope/soapenv:Body/getPersonBySgidResponse/getPersonBySgidReturn/getPersonBySgidReturn/divisionName" )
  11. Set objRoot = objXML.documentElement
  12. Response.Write "<br/> myXml == "  &  myXML
  13. Response.Write "<br/> objXML == "  &  objXML.Text
  14. Response.Write "<br/> objRoot == "  &  objRoot.Text
  15. 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 :)

Reply

Marsh Posté le 04-02-2014 à 16:18:42   

Reply

Marsh Posté le 04-02-2014 à 23:21:17    

Personne ? :(

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed