|
| Lecture d'une reponse en XML |
| Iniciado por go24, 25,oct. 2019 16:19 - 5 respuestas |
| |
| | | |
|
| |
| Publicado el 25,octubre 2019 - 16:19 |
Bonjour,
J 'utilise un web service (compta) qui me renvoi une reponse sous la forme d'un XML Voici un ex de la reponse
<BrowseDetailsResponse version="14.0"> <Update> <Response status="success"> <TxnKey> <Key> <CmpCode>COMPANY</CmpCode> <Code>BETAC40</Code> <Number>1400093044</Number> <LineNumber>2</LineNumber> </Key> <TimeStamp>1</TimeStamp> </TxnKey> </Response> <Response status="success"> <TxnKey> <Key> <CmpCode>COMPANY</CmpCode> <Code>BETAC40</Code> <Number>1400099707</Number> <LineNumber>2</LineNumber> </Key> <TimeStamp>1</TimeStamp> </TxnKey> </Response> </Update> </BrowseDetailsResponse>
j 'utilise XMLExtraitChaîne qui est bien pratique et me permet de choisir la ligne que je veux traiter :
dans ce code la pas de probleme les info sont toutes OK sLook4 = XMLExtraitChaîne(sResponse,"Code",nLigne,XMLExact) sLook4 = XMLExtraitChaîne(sResponse,"Number",nLigne,XMLExact) sLook4 = XMLExtraitChaîne(sResponse,"CmpCode",nLigne,XMLExact) sLook4 = XMLExtraitChaîne(sResponse,"LineNumber",nLigne,XMLExact)
////////////////////////////////////////////////////////////// La ou je bute c'est sur <Response status="success">
////// Rien de ceci ne marche !!!!!!! sLook4 = XMLExtraitChaîne(sResponse,"Response[1]_status",1,XMLIgnoreLaCasse) sLook4 = XMLExtraitChaîne(sResponse,"Response[1]/status",1,XMLIgnoreLaCasse) sLook4 = XMLExtraitChaîne(sResponse,"Response[1]@status",1,XMLIgnoreLaCasse) sLook4 = XMLExtraitChaîne(sResponse,"Response[1]/@status",1,XMLIgnoreLaCasse) sLook4 = XMLExtraitChaîne(sResponse,"Response[1]@status",1,XMLIgnoreLaCasse) sLook4 = XMLExtraitChaîne(sResponse,"status",1,XMLIgnoreLaCasse) sLook4 = XMLExtraitChaîne(sResponse,"Response status",1,XMLIgnoreLaCasse)
si qq a deja rencontre ce type de probleme son aide serait bienvenue
Cdl |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 948 mensajes |
|
| Publicado el 25,octubre 2019 - 18:23 |
Bonjour Effectivement je ne suis pas arrivé à récupérer avec cette fonction la valeur de la balise status. Peut-être que ce bout de code vous aidera à trouver une solution
XMLDocument("test", XMLData) IF ErreurDétectée THEN Erreur("les données ne sont pas au format XML") RETOUR END
Trace("A-"+XMLPosition("test"))
XMLFils("test") Trace("B-"+XMLPosition("test")) Trace("C-"+XMLDonnée("test"))
XMLSuivant("test")
XMLFils("test") Trace("D-"+XMLPosition("test")) Trace("E-"+XMLDonnée("test"))
XMLFils("test") Trace("F-"+XMLPosition("test")) Trace("G-"+XMLDonnée("test"))
-- L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai. Quand un utilisateur vous a aidé, n'oubliez pas de le remercier... |
| |
| |
| | | |
|
| | |
| |
| Publicado el 25,octubre 2019 - 19:10 |
En tout cas merci pour la reponse je teste ca des Lundi Bon week end |
| |
| |
| | | |
|
| | |
| |
| Publicado el 29,octubre 2019 - 09:28 |
En fait voici la solution que j'ai trouvé
sResponse =[ <BrowseDetailsResponse version="14.0"> <Update> <Response status="success"> <TxnKey> <Key> <CmpCode>COMPANY</CmpCode> <Code>BETAC40</Code> <Number>1400093044</Number> <LineNumber>2</LineNumber> </Key> <TimeStamp>1</TimeStamp> </TxnKey> </Response> <Response status="failed"> <TxnKey> <Key> <CmpCode>COMPANY</CmpCode> <Code>BETAC40</Code> <Number>1400099707</Number> <LineNumber>2</LineNumber> </Key> <TimeStamp>1</TimeStamp> </TxnKey> </Response> </Update> </BrowseDetailsResponse> ]
sLook4 est une chaîne WL.XMLDocument("XLDoc" , sResponse) IF ErreurDétectée THEN Erreur("les données ne sont pas au format XML") RETOUR END
Pour nligne = 1 to Maxligne
sLook4 = XMLLit("XLDOC","/BrowseDetailsResponse/Update/Response["+ nLigne +"]/@status") // "/BrowseDetailsResponse/Update/Response[x]/@status"
SI sLook4 = "success" ALORS sLook4 = XMLExtraitChaîne(sResponse,"Code",nLigne,XMLExact) sLook4 = XMLExtraitChaîne(sResponse,"Number",2,XMLExact) sLook4 = XMLExtraitChaîne(sResponse,"Code",2,XMLExact) sLook4 = XMLExtraitChaîne(sResponse,"Update",2,XMLExact) SINON ... FIN
Merci pour l'aide |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4 mensajes |
|
| Publicado el 29,octubre 2019 - 11:30 |
Bonjour,
Sous Windev, chaque balise du fichier XML (xmlDocument) correspond à un nœud (xmlNoeud). Chaque nœud a un nom et une valeur (..Texte et ..Nom). Par exemple : <Code>BETAC40</Code>
Dans <Response status="success">, success est un attribut de la balise <Response status> (xmlAttribut). Pour chaque nœud, il faut tester si une occurrence d'attribut existe : xml_Noeud_1..Attribut..Occurrence. Si elle existe, on la récupère : xml_Attribut = xml_Noeud_1..Attribut[1].
J'espère que ce bout de code pourra vous aider :
s_XML est une chaîne xml_Doc est un xmlDocument xml_Noeud_Racine est un xmlNoeud xml_Attribut est un xmlAttribut xml_Noeud_1 est un xmlNoeud
s_XML = [ <BrowseDetailsResponse version="14.0"> <Update> <Response status="success"> <TxnKey> <Key> <CmpCode>COMPANY</CmpCode> <Code>BETAC40</Code> <Number>1400093044</Number> <LineNumber>2</LineNumber> </Key> <TimeStamp>1</TimeStamp> </TxnKey> </Response> <Response status="success"> <TxnKey> <Key> <CmpCode>COMPANY</CmpCode> <Code>BETAC40</Code> <Number>1400099707</Number> <LineNumber>2</LineNumber> </Key> <TimeStamp>1</TimeStamp> </TxnKey> </Response> </Update> </BrowseDetailsResponse> ]
xml_Doc = XMLOuvre(s_XML, depuisChaîne)
xml_Noeud_Racine = {"xml_Doc.BrowseDetailsResponse.Update"}
Trace("Occurrence Response status : " + TableauOccurrence(xml_Noeud_Racine))
POUR TOUT xml_Noeud_1 de xml_Noeud_Racine xml_Attribut = xml_Noeud_1..Attribut[1] Trace("Balise : " + xml_Noeud_1..Nom + " // Attribut : " + xml_Attribut..Valeur) FIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 953 mensajes |
|
| Publicado el 29,octubre 2019 - 12:17 |
bonjour Go24,
vous pouvez aussi importer un fichier XML dans Windev pour avoir la saisie assistée de Windev.
vous importez ce fichier XML dans Windev , dans le treeview du projet , partie 'Descriptions externes' , clic droit 'Importer un XML ou un JSON...'
Exemple de fichier XML à importer :
<BrowseDetailsResponse version="14.0"> <Update> <Response status="success"> <TxnKey> <Key> <CmpCode>COMPANY</CmpCode> <Code>BETAC40</Code> <Number>1400093044</Number> <LineNumber>2</LineNumber> </Key> <TimeStamp>1</TimeStamp> </TxnKey> </Response> <Response status="failed"> <TxnKey> <Key> <CmpCode>COMPANY</CmpCode> <Code>BETAC40</Code> <Number>1400099707</Number> <LineNumber>2</LineNumber> </Key> <TimeStamp>1</TimeStamp> </TxnKey> </Response> </Update> </BrowseDetailsResponse>
Puis ensuite, vous pourrez déclarer un XMLDocument basé sur ce fichier, avec l'option <description="">
Exemple, si vous avez appelé votre fichier XML 'WS_compta_response' :
_my_xml est un xmlDocument<Description="WS_compta_response">
sResponse est une chaîne=[ <BrowseDetailsResponse version="14.0"> <Update> <Response status="success"> <TxnKey> <Key> <CmpCode>COMPANY</CmpCode> <Code>BETAC40</Code> <Number>1400093044</Number> <LineNumber>2</LineNumber> </Key> <TimeStamp>1</TimeStamp> </TxnKey> </Response> <Response status="failed"> <TxnKey> <Key> <CmpCode>COMPANY</CmpCode> <Code>BETAC40</Code> <Number>1400099707</Number> <LineNumber>2</LineNumber> </Key> <TimeStamp>1</TimeStamp> </TxnKey> </Response> </Update> </BrowseDetailsResponse> ]
_my_xml=XMLOuvre(sResponse,depuisChaîne)
POUR _id_response=1 _À_ _my_xml.BrowseDetailsResponse.Update.Response..Occurrence Trace("Response id : "+_id_response+" , status = "+_my_xml.BrowseDetailsResponse.Update.Response[_id_response]:status) FIN |
| |
| |
| | | |
|
| | | | |
| | |
|