|
FOROS PROFESIONALES WINDEV, WEBDEV y WINDEV Mobile |
| | | | | |
| Inicio → WINDEV 2025 → Parcours d'un XML et comportemens incohérents sur XMLTrouve, XMLEnDehors et XMLRetourPosition |
| Parcours d'un XML et comportemens incohérents sur XMLTrouve, XMLEnDehors et XMLRetourPosition |
| Iniciado por VincentRG, 09,jul. 2020 17:23 - No hay respuesta |
| |
| | | |
|
| |
Miembro registrado 12 mensajes |
|
| Publicado el 09,julio 2020 - 17:23 |
Bonjour,
Je suis sur un projet dont la base de code existe déjà, et qui comprend pas mal de parcours de fichiers XML. Ces parcours sont effectués avec les fonctions XML...(). Les variables xmlDocument, xmlNoeud, etc ne sont pas utilisées. Cherchant à améliorer un peu les algorithmes, j'ai fait quelques tests sur ces fonctions pour comprendre leur fonctionnement (la doc est assez évasive). J'ai noté plusieurs incohérences, que je vous livre un peu sous la forme d'un test unitaire:
sSourceXml est une chaîne = [ <?xml version="1.0" encoding="UTF8"?> <LISTE> <PRODUIT> <IDProduit>Produit1</IDProduit> <IDProduit>Produit2</IDProduit> </PRODUIT> </LISTE> ] sNomDocXml est une chaîne = "DocXml" bRes est un booléen = XMLDocument(sNomDocXml, sSourceXml) dbgAssertion(bRes = Vrai)
bRetour est un booléen = Faux
bRetour = XMLRacine(sNomDocXml) dbgAssertion(bRetour = Vrai) dbgAssertion(XMLTrouve(sNomDocXml) = Vrai) dbgAssertion(XMLEnDehors(sNomDocXml) = Faux) dbgAssertion(XMLNomElément(sNomDocXml) = "LISTE")
bRetour = XMLFils(sNomDocXml) dbgAssertion(bRetour = Vrai) dbgAssertion(XMLTrouve(sNomDocXml) = Vrai) dbgAssertion(XMLEnDehors(sNomDocXml) = Faux) dbgAssertion(XMLNomElément(sNomDocXml) = "PRODUIT")
bRetour = XMLFils(sNomDocXml) dbgAssertion(bRetour = Vrai) dbgAssertion(XMLTrouve(sNomDocXml) = Vrai) dbgAssertion(XMLEnDehors(sNomDocXml) = Faux) dbgAssertion(XMLNomElément(sNomDocXml) = "IDProduit") dbgAssertion(XMLDonnée(sNomDocXml) = "Produit1")
bRetour = XMLSuivant(sNomDocXml) dbgAssertion(bRetour = Vrai) dbgAssertion(XMLTrouve(sNomDocXml) = Vrai) dbgAssertion(XMLEnDehors(sNomDocXml) = Faux) dbgAssertion(XMLNomElément(sNomDocXml) = "IDProduit") dbgAssertion(XMLDonnée(sNomDocXml) = "Produit2")
iPositionProduit2 est un entier = XMLSauvePosition(sNomDocXml) dbgAssertion(iPositionProduit2 <> -1)
bRetour = XMLSuivant(sNomDocXml) dbgAssertion(bRetour = Faux) dbgAssertion(XMLTrouve(sNomDocXml) = Faux) dbgAssertion(XMLEnDehors(sNomDocXml) = Vrai)
iPositionInvalide est un entier = XMLSauvePosition(sNomDocXml)
dbgAssertion(iPositionInvalide <> -1)
bRetour = XMLRetourPosition(sNomDocXml, iPositionProduit2, XMLRPConserve)
dbgAssertion(bRetour = Vrai) dbgAssertion(XMLTrouve(sNomDocXml) = Faux) dbgAssertion(XMLEnDehors(sNomDocXml) = Vrai) dbgAssertion(XMLNomElément(sNomDocXml) = "IDProduit") dbgAssertion(XMLDonnée(sNomDocXml) = "Produit2")
bRetour = XMLRacine(sNomDocXml)
dbgAssertion(bRetour = Vrai) dbgAssertion(XMLTrouve(sNomDocXml) = Vrai) dbgAssertion(XMLEnDehors(sNomDocXml) = Faux) dbgAssertion(XMLNomElément(sNomDocXml) = "LISTE")
bRetour = XMLRetourPosition(sNomDocXml, iPositionProduit2, XMLRPConserve)
dbgAssertion(bRetour = Vrai) dbgAssertion(XMLTrouve(sNomDocXml) = Vrai) dbgAssertion(XMLEnDehors(sNomDocXml) = Faux) dbgAssertion(XMLNomElément(sNomDocXml) = "IDProduit") dbgAssertion(XMLDonnée(sNomDocXml) = "Produit2")
bRetour = XMLSupprime(sNomDocXml)
dbgAssertion(bRetour = Vrai) dbgAssertion(XMLTrouve(sNomDocXml) = Vrai) dbgAssertion(XMLEnDehors(sNomDocXml) = Faux) dbgAssertion(XMLNomElément(sNomDocXml) = "PRODUIT")
bRetour = XMLRetourPosition(sNomDocXml, iPositionProduit2, XMLRPConserve)
dbgAssertion(bRetour = Vrai) dbgAssertion(XMLTrouve(sNomDocXml) = Vrai) dbgAssertion(XMLEnDehors(sNomDocXml) = Faux)
bRetour = XMLRacine(sNomDocXml) dbgAssertion(bRetour = Vrai) dbgAssertion(XMLTrouve(sNomDocXml) = Vrai) dbgAssertion(XMLEnDehors(sNomDocXml) = Faux) dbgAssertion(XMLNomElément(sNomDocXml) = "LISTE")
bRetour = XMLFils(sNomDocXml) dbgAssertion(bRetour = Vrai) dbgAssertion(XMLTrouve(sNomDocXml) = Vrai) dbgAssertion(XMLEnDehors(sNomDocXml) = Faux) dbgAssertion(XMLNomElément(sNomDocXml) = "PRODUIT")
bRetour = XMLFils(sNomDocXml) dbgAssertion(bRetour = Vrai) dbgAssertion(XMLTrouve(sNomDocXml) = Vrai) dbgAssertion(XMLEnDehors(sNomDocXml) = Faux) dbgAssertion(XMLNomElément(sNomDocXml) = "IDProduit") dbgAssertion(XMLDonnée(sNomDocXml) = "Produit1")
iPositionProduit1 est un entier = XMLSauvePosition(sNomDocXml) dbgAssertion(iPositionProduit1 <> -1)
bRetour = XMLSuivant(sNomDocXml) dbgAssertion(bRetour = Faux) dbgAssertion(XMLTrouve(sNomDocXml) = Faux) dbgAssertion(XMLEnDehors(sNomDocXml) = Vrai)
bRetour = XMLRetourPosition(sNomDocXml, iPositionProduit1, XMLRPConserve)
dbgAssertion(bRetour = Vrai) dbgAssertion(XMLTrouve(sNomDocXml) = Faux) dbgAssertion(XMLEnDehors(sNomDocXml) = Vrai) dbgAssertion(XMLNomElément(sNomDocXml) = "IDProduit") dbgAssertion(XMLDonnée(sNomDocXml) = "Produit1")
bRetour = XMLSupprime(sNomDocXml)
dbgAssertion(bRetour = Vrai) dbgAssertion(XMLTrouve(sNomDocXml) = Faux) dbgAssertion(XMLEnDehors(sNomDocXml) = Vrai) dbgAssertion(XMLNomElément(sNomDocXml) = "PRODUIT")
XMLTermine(sNomDocXml)
Tous les comportements "incohérents" sont indiqués.
Pour les résumer: - on peut sauvegarder une position invalide dans le XML, sans avoir de retour d'erreur - on peut faire un XMLRetourPosition (renvoie Vrai) sur un noeud qui a été supprimé - XMLTrouve et XMLEnDehors ne prennent pas en compte le changement de position suite à un XMLSupprime (qui positionne sur le parent) ou à un XMLRetourPosition
C'est pas très jojo quand même, et ça manque de logique. Y-a-t'il une raison à tout ça?
J'ai fait quelques tests avec les variables xmlDocument, etc pour manipuler les fichiers XML. Ca semble bien fonctionner (malgré 2 ou 3 détails pas très pratique), mais je n'ai pas trouvé comment faire de recherche à la façon de XMLRecherche. Et je ne peux pas malheureusement pas modifier tout le code de parcours dans le projet. |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|