OVH Cloud OVH Cloud

[WD75] XML j'ai comme une petite flemme de chercher

4 réponses
Avatar
Roumegou Eric
soit une chaine XMLmaCh contenant de l'xml de ce type
<PANIER>
<LIGN>
<GDE_ID>10247</GDE_ID><QTE>1</QTE>
</LIGN>
<LIGN>
<GDE_ID>10247</GDE_ID><QTE>1</QTE>
</LIGN>
etc ...
</PANIER>

comment :
Rechercher si la valeur de mon GDE_ID est déja présente et dans ce cas
faire un + 1 dans la valeur se rapportant à QTE et màj la chaine xml.
Dans le cas contraire, insérer un <LIGN>...</LIGN> complet.

je me mélange un peu dans les fonctions de recherche et y a-t-il un
moyen de faire une insertion à part manipuler la chaîne ?

Merci de vos réponses

--
Eric Roumégou
http://cerbermail.com/?TSoulBerPA
(cliquez sur le lien ci-dessus pour me contacter en privé)

4 réponses

Avatar
Roumegou Eric
Le 03/11/2004, Roumegou Eric a supposé :
soit une chaine XMLmaCh contenant de l'xml de ce type
<PANIER>
<LIGN>
<GDE_ID>10247</GDE_ID><QTE>1</QTE>
</LIGN>
<LIGN>
<GDE_ID>123</GDE_ID><QTE>1</QTE>



Hum ! bien sûr l'id est unique et change à chaque fois. Tiens ! pan sur
la tête: le copier coller ne dispense pas de faire attention.

</LIGN>
etc ...
</PANIER>



--
Eric Roumégou
http://cerbermail.com/?TSoulBerPA
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Marcel.berman
Salut !

On 3-Nov-2004, Roumegou Eric wrote:

soit une chaine XMLmaCh contenant de l'xml de ce type
<PANIER>
<LIGN>
<GDE_ID>10247</GDE_ID><QTE>1</QTE>
</LIGN>
<LIGN>
<GDE_ID>10247</GDE_ID><QTE>1</QTE>
</LIGN>
etc ...
</PANIER>

comment :
Rechercher si la valeur de mon GDE_ID est déja présente et dans ce cas
faire un + 1 dans la valeur se rapportant à QTE et màj la chaine xml.
Dans le cas contraire, insérer un <LIGN>...</LIGN> complet.

je me mélange un peu dans les fonctions de recherche et y a-t-il un
moyen de faire une insertion à part manipuler la chaîne ?

Merci de vos réponses



La solution m'intéresse aussi !!!
Pour le moment, je chipote avec des fonctions "maison" basées sur des
chaineoccurrence(), extraitchaine() et reconstruction du code XML ... C'est
lourd !
Je pensais pouvoir utiliser XPath ... mais je dois avouer que je m'y perd un
peu ... :o(

Bien à vous !
--
Marcel Berman
c/o Managing Business SPRL
Allée du Petit Paris, 11
B - 1410 - Waterloo
Tel : +32 2 351.60.64
Fax : +32 2 351.45.78
Gsm : +32 475.799.477
Avatar
Roumegou Eric
a écrit :
Salut !

On 3-Nov-2004, Roumegou Eric wrote:

soit une chaine XMLmaCh contenant de l'xml de ce type
<PANIER>
<LIGN>
<GDE_ID>10247</GDE_ID><QTE>1</QTE>
</LIGN>
<LIGN>
<GDE_ID>10247</GDE_ID><QTE>1</QTE>
</LIGN>
etc ...
</PANIER>

comment :
Rechercher si la valeur de mon GDE_ID est déja présente et dans ce cas
faire un + 1 dans la valeur se rapportant à QTE et màj la chaine xml.
Dans le cas contraire, insérer un <LIGN>...</LIGN> complet.

je me mélange un peu dans les fonctions de recherche et y a-t-il un
moyen de faire une insertion à part manipuler la chaîne ?

Merci de vos réponses



La solution m'intéresse aussi !!!
Pour le moment, je chipote avec des fonctions "maison" basées sur des
chaineoccurrence(), extraitchaine() et reconstruction du code XML ... C'est
lourd !
Je pensais pouvoir utiliser XPath ... mais je dois avouer que je m'y perd un
peu ... :o(



l'idéal serait de lancer du code sql sur une chaine XML.
genre XMLRequest("SELECT GDE_ID WHERE GDE_ID247")
je suis en train de le coder façon classique mais je ne sais meme pas
si l'on peut màj la chaine XML ?
Autrement dit, soit cette déclaration
XMLDocument("DocXML", wPPL_DETAIL)
si je bidouille la chaine originale wPPL_DETAIL, DocXMl prendra-t-il en
compte les modifs?

Hum ! à chaque fois que je fais le choix du support XML pour mes
données, j'ai vraiment l'impression que cela tiens plus du snobisme que
du fonctionnel et de la performance.


Bien à vous !



--
Eric Roumégou
http://cerbermail.com/?TSoulBerPA
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Roumegou Eric
Roumegou Eric vient de nous annoncer :
a écrit :

Hum ! à chaque fois que je fais le choix du support XML pour mes données,
j'ai vraiment l'impression que cela tiens plus du snobisme que du fonctionnel
et de la performance.



et donc on choisit la méthode bourrin ... exit les fn XML

arech,newval,oldval sont des chaînes
oldqte,newqte sont des entiers
// Recherche si L'article n'existe pas déja.
arech="<LIGN><GDE_ID>"+GDE_ID+"</GDE_ID>"
SI Position(wPPL_DETAIL,arech)>0 ALORS
// trouvé on incrémente de 1
oldqte=Val(ExtraitEntre(wPPL_DETAIL,arech+"<QTE>","</QTE>"))
newqte=oldqte+1
// et l'on remplace
oldval=arech+"<QTE>"+oldqte+"</QTE></LIGN>"+RC
newval=arech+"<QTE>"+newqte+"</QTE></LIGN>"+RC
wPPL_DETAIL=Remplace(wPPL_DETAIL,oldval,newval)
SINON
//pas trouvé, on crée une nouvelle ligne en fin de panier
wPPL_DETAIL=Remplace(wPPL_DETAIL,"</PANIER>",arech+"<QTE>1</QTE></LIGN>"+RC+"</PANIER>")
FIN

avec la fn ExtraitEntre
FONCTION ExtraitEntre(pExploree,pChDeb,pChFin,pDeb=1)
// extrait la partie de pExploree entre pChDeb et pChFin

chRetour est chaîne
posdeb,posfin sont des entiers
posdeb=0;posfin=0;chRetour=""
posdeb=Position(pExploree,pChDeb,pDeb)+Taille(pChDeb)
posfin=Position(pExploree,pChFin,posdeb)
SI posfin<>0 ALORS
chRetour=Milieu(pExploree,posdeb,posfin-posdeb)
pDeb=posfin
FIN

RENVOYER chRetour

Sinon, Il me semble avoir vu des annonces concernant XML pour la 9 qui
se manipulerait avec les fn fichiers ????

Bien à vous !





--
Eric Roumégou
http://cerbermail.com/?TSoulBerPA
(cliquez sur le lien ci-dessus pour me contacter en privé)