Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Erreur aléatoire avec la fonction XMLDocument

3 réponses
Avatar
delirman49
Bonjour,

Dans le cadre d'une application d=E9velopp=E9e en windev mobile,
j'interroge via GPRS mon serveur web (une simple page PHP) qui me
renvoi une liste "d'item" que je peux ensuite proposer via une liste
d=E9roulante dans mon application.

Le probl=E8me que je rencontre est le suivant :
En ex=E9cutant le m=EAme code, de mani=E8re compl=E8tement al=E9atoire,
l'application plante mais toujours sur la m=EAme ligne (ou du moins,
toujours en appelant les fonctions XML.... il me semble). Voici un
bout du code incrimin=E9 :

//****************************************************************
source est un buffer
sourceXML est une chaine

SI PAS HTTPRequ=EAte(url+"&v=3D"+HeureSys()) ALORS

Erreur("Impossible de contacter le serveur")
Ferme()

SINON

source =3D HTTPDonneR=E9sultat()
sourceXML =3D AnsiVersUnicode(source) //Source r=E9cup=E9r=E9e avec
succ=E8s

XMLDocument("xml",sourceXML) //Plantage al=E9atoire =E0 cette ligne


XMLPremier("xml")
XMLFils("xml")
TANTQUE XMLTrouve("xml")

XMLSuivant("xml")
FIN

XMLTermine("xml")

FIN




Dans ce bout de code, le logiciel plante sur la ligne du XMLDocument.
Cependant, en tra=E7ant ma variable sourceXML, j'ai bien =E0 chaque fois
la m=EAme liste bien format=E9e en XML que je r=E9cup=E8re.
Le plus troublant c'est que le message d'erreur ne contient rien. Ca
ne me renvoi aucune erreur (pas d'erreur syst=E8me et pas d'erreur
explicite dans ErreurInfo(errComplet)).

Est-ce que quelqu'un aurait d=E9j=E0 rencontr=E9 le probl=E8me ?

//**************************************************************

3 réponses

Avatar
Pascal F
a émis l'idée suivante :
Bonjour,

Dans le cadre d'une application développée en windev mobile,
j'interroge via GPRS mon serveur web (une simple page PHP) qui me
renvoi une liste "d'item" que je peux ensuite proposer via une liste
déroulante dans mon application.

Le problème que je rencontre est le suivant :
En exécutant le même code, de manière complètement aléatoire,
l'application plante mais toujours sur la même ligne (ou du moins,
toujours en appelant les fonctions XML.... il me semble). Voici un
bout du code incriminé :

//****************************************************************
source est un buffer
sourceXML est une chaine

SI PAS HTTPRequête(url+"&v="+HeureSys()) ALORS

Erreur("Impossible de contacter le serveur")
Ferme()

SINON

source = HTTPDonneRésultat()
sourceXML = AnsiVersUnicode(source) //Source récupérée avec
succès

XMLDocument("xml",sourceXML) //Plantage aléatoire à cette ligne


XMLPremier("xml")
XMLFils("xml")
TANTQUE XMLTrouve("xml")

XMLSuivant("xml")
FIN

XMLTermine("xml")

FIN




Dans ce bout de code, le logiciel plante sur la ligne du XMLDocument.
Cependant, en traçant ma variable sourceXML, j'ai bien à chaque fois
la même liste bien formatée en XML que je récupère.
Le plus troublant c'est que le message d'erreur ne contient rien. Ca
ne me renvoi aucune erreur (pas d'erreur système et pas d'erreur
explicite dans ErreurInfo(errComplet)).

Est-ce que quelqu'un aurait déjà rencontré le problème ?

//**************************************************************



J'ai eu ce genre de problème parceque le XMLTermine ne libérait pas correctement le XML. Faut que je regarde comment j'ai résolu
le problème.

--
Pascal

Ne garder que le prénom pour me joindre
Avatar
Pascal F
Voila comment j'ai résolu:
J'ai une procédure de chargement du XML
PROCEDURE Rempli_Tableau_Titre(pTitre)

DocXML est une chaîne = "XML"
InfoXML est une chaîne // Chaîne résultat
eIndice est un entier
ePositionXML est un entier
cZone est une chaîne
eInd est un entier
eCol est un entier


// Chargement du fichier XML dans une chaîne
InfoXML = pTitre
SI pTitre="" ALORS RENVOYER Vrai

// Initialisation des fonctions XML sur ce fichier
SI PAS XMLDocument(DocXML,InfoXML) ALORS
Erreur(ErreurInfo())
RENVOYER Faux
FIN

/---- Traitement du XML
/ Terminaison du XML

SI PAS XMLTermine(DocXML) ALORS // Libère le document XML
Erreur(ErreurInfo())
FIN
DocXML=""
RENVOYER Vrai


CAS EXCEPTION:
ExceptionActive()
SI EnModeTest() ALORS
Erreur(ExceptionInfo(),ExceptionInfo(errLigne),ExceptionInfo(errTraitement))
FIN
XMLTermine(DocXML)
RENVOYER Faux

Ensuite lorsque je quitte la fenetre dans laquelle je traite le XML je refait un
XMLTermine(DocXML)

Depuis je n'ai plus de problème.

--
Pascal

Ne garder que le prénom pour me joindre
Avatar
soundofthunder
Le mercredi 24 Octobre 2007 à 19:28 par Pascal F :
Voila comment j'ai résolu:
J'ai une procédure de chargement du XML
PROCEDURE Rempli_Tableau_Titre(pTitre)

DocXML est une chaîne = "XML"
InfoXML est une chaîne // Chaîne résultat
eIndice est un entier
ePositionXML est un entier
cZone est une chaîne
eInd est un entier
eCol est un entier


// Chargement du fichier XML dans une chaîne
InfoXML = pTitre
SI pTitre="" ALORS RENVOYER Vrai

// Initialisation des fonctions XML sur ce fichier
SI PAS XMLDocument(DocXML,InfoXML) ALORS
Erreur(ErreurInfo())
RENVOYER Faux
FIN

/---- Traitement du XML
/ Terminaison du XML

SI PAS XMLTermine(DocXML) ALORS // Libère le document XML
Erreur(ErreurInfo())
FIN
DocXML=""
RENVOYER Vrai


CAS EXCEPTION:
ExceptionActive()
SI EnModeTest() ALORS
Erreur(ExceptionInfo(),ExceptionInfo(errLigne),ExceptionInfo(errTraitement))
FIN
XMLTermine(DocXML)
RENVOYER Faux

Ensuite lorsque je quitte la fenetre dans laquelle je traite le XML je refait
un
XMLTermine(DocXML)

Depuis je n'ai plus de problème.

--
Pascal

Ne garder que le prénom pour me joindre


Bonsoir pascal,

J'expérimente ce problème et j'essaie d'implanter votre code.
J'ai juste une interrogation concernant votre phrase
Ensuite lorsque je quitte la fenetre dans laquelle je traite le XML je refait un
XMLTermine(DocXML)

: comment vous refaites un xmltermine alors alors que vous avez fait un seul xmldocument?

Merci pour votre réponse.

elie