PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV 2024 → Probleme dans une boucle de creation fichier XML
Probleme dans une boucle de creation fichier XML
Débuté par Defcom60, 03 oct. 2013 18:39 - 2 réponses
Posté le 03 octobre 2013 - 18:39
Bonjour,

je désire crée une fichier XML pour cela j'ai ecrit le code suivant:


POUR I=1 _A_ 7


XMLAjouteFils("Reponse","DayBased")

XMLFils("Reponse")
XMLDernier("Reponse")

XMLAjouteFils("Reponse","UCPTindex",NumériqueVersChaîne(I,"1d"))

XMLAjouteFils("Reponse","UCPTdescription",tabProgrammeHoraire[I+7][1])
XMLAjouteFils("Reponse","UCPTpriority","255")
XMLAjouteFils("Reponse","Event")
XMLFils("Reponse")
XMLDernier("Reponse")

XMLAjouteFils("Reponse","UCPTindex","0")
XMLAjouteFils("Reponse","UCPTtime","00:00:00.000")
XMLAjouteFils("Reponse","UCPTtimeDirection","TD_POSITIVE",Vrai)
XMLAjouteAttribut("Reponse","LonFormat","#8000010128000000[4].UCPTtimeDirection")
XMLParent("Reponse")
XMLAjouteFils("Reponse","UCPTeventType","ET_LOCK",Vrai)
XMLAjouteAttribut("Reponse","LonFormat","#8000010128000000[4].UCPTeventType")
XMLParent("Reponse")
XMLParent("Reponse")

POUR J=1 _A_ 2
XMLAjouteFils("Reponse","Event")
XMLFils("Reponse")
XMLDernier("Reponse")
XMLAjouteFils("Reponse","UCPTindex",NumériqueVersChaîne(J,"1d"))
XMLAjouteFils("Reponse","UCPTtime","07:00:00.000")
XMLAjouteFils("Reponse","UCPTvalue","EXTINCTION",Vrai)
XMLAjouteAttribut("Reponse","LonFormat","")
XMLParent("Reponse")
XMLAjouteFils("Reponse","UCPTvalue","EXTINCTION",Vrai)
XMLAjouteAttribut("Reponse","LonFormat","#8000010128000000[4].UCPTvalueDef")
XMLParent("Reponse")
XMLAjouteFils("Reponse","UCPTtimeDirection","TD_POSITIVE",Vrai)
XMLAjouteAttribut("Reponse","LonFormat","#8000010128000000[4].UCPTtimeDirection")
XMLParent("Reponse")
XMLAjouteFils("Reponse","UCPTeventType","ET_NUL",Vrai)
XMLAjouteAttribut("Reponse","LonFormat","#8000010128000000[4].UCPTeventType")
XMLParent("Reponse")
XMLParent("Reponse")
FIN



//XMLParent("Reponse")

//XMLParent("Reponse")
XMLAjouteFils("Reponse","Weekdays")
XMLFils("Reponse")
XMLDernier("Reponse")
XMLAjouteFils("Reponse","UCPTsunday",tabProgrammeHoraire[I+7][2])
XMLAjouteFils("Reponse","UCPTmonday",tabProgrammeHoraire[I+7][3])
XMLAjouteFils("Reponse","UCPTtuesday",tabProgrammeHoraire[I+7][4])
XMLAjouteFils("Reponse","UCPTwednesday",tabProgrammeHoraire[I+7][5])
XMLAjouteFils("Reponse","UCPTthursday",tabProgrammeHoraire[I+7][6])
XMLAjouteFils("Reponse","UCPTfriday",tabProgrammeHoraire[I+7][7])
XMLAjouteFils("Reponse","UCPTsaturday",tabProgrammeHoraire[I+7][8])
XMLParent("Reponse")

XMLParent("Reponse")

FIN


le probleme c'est que dans le resultat la premiere boucle n'est pas bonne. La balise </DayBase> se retrouve a la fin du fichier et non comme les autres boucle à la fin de la balise </Weekdays>



voici ce que j'obtient.

structure reduite

<?xml version="1.0" encoding="ISO-8859-1"?>
-<DayBased>
<UCPTindex>1</UCPTindex>
<UCPTdescription>Dimanche</UCPTdescription>
<UCPTpriority>255</UCPTpriority>
+<Event>
+<Event>
+<Event>
+<Weekdays>
+<DayBased>----
+<DayBased>----
+<DayBased>----
+<DayBased>----
+<DayBased>----
+<DayBased>----
</DayBased

au lieu

<?xml version="1.0" encoding="ISO-8859-1"?>
+<DayBased>----
+<DayBased>----
+<DayBased>----
+<DayBased>----
+<DayBased>----
+<DayBased>----
+<DayBased>----

Je ne comprend pas pourquoi la premiére boucle est fausse et pas les autres.
Membre enregistré
85 messages
Posté le 31 janvier 2019 - 13:44
Bonjour

avez-vous reçu une réponse ou trouvé une solution ?

je dois programmer la génération de virements SEPA

J'ai commencé par un virement, avec le code suivant, qui fonctionne



// Création de la variable XML xml_virements
xml_virements est un xmlDocument,description="pain_001_001_08"

gDateChaine=Gauche(DateSys(),4)+"-"+Milieu(DateSys(),5,2)+"-"+Droite(DateSys(),2)+...
"T"+Gauche(HeureSys(),2)+":"+Milieu(HeureSys(),3,2)+":00"

//génération GrpHdr
xml_virements.Document.CstmrCdtTrfInitn.GrpHdr.MsgId="Virement remboursement du capital"
xml_virements.Document.CstmrCdtTrfInitn.GrpHdr.CreDtTm=gDateChaine
xml_virements.Document.CstmrCdtTrfInitn.GrpHdr.NbOfTxs=2
xml_virements.Document.CstmrCdtTrfInitn.GrpHdr.CtrlSum=187654.32
xml_virements.Document.CstmrCdtTrfInitn.GrpHdr.InitgPty.Nm="RESIDENCE DU BOIS D'AUROUZE T1"


//génération PmtInf
gDateChaine=Gauche(DateSys(),4)+"-"+Milieu(DateSys(),5,2)+"-"+Droite(DateSys(),2)
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.PmtInfId="abcdef 12345"
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.PmtMtd="TRF"
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.BtchBookg="false"
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.NbOfTxs=2
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.CtrlSum=187654.32
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.PmtTpInf.SvcLvl.Cd="SEPA"
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.ReqdExctnDt.Dt=gDateChaine
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.Dbtr.Nm="RESIDENCE DU BOIS D'AUROUZE T1"
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.DbtrAcct.Id.IBAN="FR7640978000851336917000189"
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.DbtrAgt.FinInstnId.BICFI="BKAUATWW"

//génération credit transfer CdtTrfTxInf

HExécuteRequête(REQ_)

xml_virements.Document.CstmrCdtTrfInitn.PmtInf.CdtTrfTxInf.PmtId.InstrId="ABC/060928/cct001/1"
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.CdtTrfTxInf.PmtId.EndToEndId="ABC/4562/2006-09-08"
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.CdtTrfTxInf.Amt.InstdAmt:Ccy="EUR"
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.CdtTrfTxInf.Amt.InstdAmt="70000"
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.CdtTrfTxInf.CdtrAgt.FinInstnId.Nm="DEF electronics"
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.CdtTrfTxInf.CdtrAcct.Id.IBAN="GB29NWBK60161331926819"
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.CdtTrfTxInf.RgltryRptg.Dtls.Cd=150
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.CdtTrfTxInf.RmtInf.Ustrd="Commercial invoice 4562 dated 2006-09-08"

//conversion
sInfoxml=XMLConstruitChaîne(xml_virements,XMLDocumentDéfaut)

//trace(sInfoxml)

SI XMLDocumentValide(xml_virements,"C:\A\0_Clients\0_Comptabilités\Bois_aurouze\Application\SRBA TR 1\Exe\pain.001.001.08") = Faux ALORS
Erreur(ErreurInfo())
SINON
Info("Le document XML est valide")
FIN

//XMLSauve(xml_virements, fRepExe() + ["\"] + "xml_virements.xml")
//LanceAppliAssociée(fRepExe() + ["\"] + "xml_virements.xml")
fSauveTexte("C:\A\0_Clients\0_Comptabilités\Bois_aurouze\Application\SRBA TR 1\Exe\xml_virements.xml",sInfoxml)
LanceAppliAssociée("C:\A\0_Clients\0_Comptabilités\Bois_aurouze\Application\SRBA TR 1\Exe\xml_virements.xml")


cela fontionne bien.

maintenant je voudrais boucler pour passer de un virement à plusieurs.

J'envisage :

HExécuteRequête(REQ_soldes_créditeurs)
POUR TOUT REQ_soldes_créditeurs

xml_virements.Document.CstmrCdtTrfInitn.PmtInf.CdtTrfTxInf.PmtId.InstrId="Paiement de votre solde créditeur"
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.CdtTrfTxInf.PmtId.EndToEndId="Paiement de votre solde créditeur"
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.CdtTrfTxInf.Amt.InstdAmt:Ccy="EUR"
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.CdtTrfTxInf.Amt.InstdAmt=REQ_soldes_créditeurs.Solde_créditeur
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.CdtTrfTxInf.CdtrAgt.FinInstnId.Nm=REQ_soldes_créditeurs.Actionnaire_code
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.CdtTrfTxInf.CdtrAcct.Id.IBAN=REQ_soldes_créditeurs.Actionnaire_IBAN
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.CdtTrfTxInf.RgltryRptg.Dtls.Cd="150"
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.CdtTrfTxInf.RmtInf.Ustrd="Paiement de votre solde créditeur"

FIN

Mais je ne trouve pas la fonction pour ajouter les lignes qui correspondent à un virement, les unes à la suite des autres.

Merci au super pro du xml !
Posté le 31 janvier 2019 - 15:00
Bonjour,

Dans la boucle, il suffit de mettre un indice

nIndice est un entier

POUR TOUT REQ_soldes_créditeurs
nIndice++
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.CdtTrfTxInf[nIndice].PmtId.InstrId="Paiement de votre solde créditeur"
xml_virements.Document.CstmrCdtTrfInitn.PmtInf.CdtTrfTxInf.PmtId[nIndice]..EndToEndId="Paiement de votre solde créditeur"
...
fin

Bon dev.