PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Windev Mobile - XML - XSD - Windows Mobile
Windev Mobile - XML - XSD - Windows Mobile
Débuté par Kerinec Nicolas, 23 oct. 2014 14:17 - 1 réponse
Posté le 23 octobre 2014 - 14:17
Bonjour,

Je souhaite effectuer un export simple d'une liste(requête) sous la forme xml.

J'ai fait un programme de la manière suivante:

1 - Création d'un fichier XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="achat_veau">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="acv_id" type="xsd:integer"/>
<xsd:element name="frn_id" type="xsd:integer"/>
<xsd:element name="ach_id" type="xsd:integer"/>
<xsd:element name="acv_date" type="xsd:date"/>
<xsd:element name="acv_ligne" type="xsd:integer"/>
<xsd:element name="acv_boucle_traduit" type="xsd:string"/>
<xsd:element name="acv_prix" type="xsd:double"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>


2 - Création d'un requête SQL pour l'alimentation du XML

3 - Parcours de la requête SQL avec création du XML
// BOUCLE DE PARCOURS DE L'ENSEMBLE DES ACHAT VEAUX A TRANSFERER
HExécuteRequête(REQ_SELECT_Achat_veau_A_Envoyer,hRequêteDéfaut)
HLitPremier(REQ_SELECT_Achat_veau_A_Envoyer)
TANTQUE HTrouve(REQ_SELECT_Achat_veau_A_Envoyer)


cMonDoc.achat_veau.acv_id[i] = REQ_SELECT_Achat_veau_A_Envoyer.acv_id
cMonDoc.achat_veau.frn_id[i] = REQ_SELECT_Achat_veau_A_Envoyer.frn_id
cMonDoc.achat_veau.ach_id[i] = REQ_SELECT_Achat_veau_A_Envoyer.ach_id
cMonDoc.achat_veau.acv_date[i] = REQ_SELECT_Achat_veau_A_Envoyer.acv_date
cMonDoc.achat_veau.acv_ligne[i] = REQ_SELECT_Achat_veau_A_Envoyer.acv_ligne
cMonDoc.achat_veau.acv_boucle_traduit[i] = REQ_SELECT_Achat_veau_A_Envoyer.acv_boucle_traduit
cMonDoc.achat_veau.acv_prix[i] = REQ_SELECT_Achat_veau_A_Envoyer.acv_prix

i++
HLitSuivant(REQ_SELECT_Achat_veau_A_Envoyer)

FIN
HLibèreRequête(REQ_SELECT_Achat_veau_A_Envoyer)

Mon problème est que ça ne fonctionne pas.
J'utilise mal les fonctions XML Windev je pense.
La solution ci-dessous fonctionne si j'ai une seul ligne mais pas plusieurs lignes dans le résultat de la requête.

Merci d'avance de votre aide.
Posté le 27 octobre 2014 - 09:49
Après plusieurs remarques, j'ai effectué les changements suivants, mais malheureusement ça ne fonctionne pas dans le cas de plus de 2 nœuds:

1 - Nouveau XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="achat_veaux">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="achat_veau">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="acv_id" type="xsd:integer"/>
<xsd:element name="frn_id" type="xsd:integer"/>
<xsd:element name="ach_id" type="xsd:integer"/>
<xsd:element name="acv_date" type="xsd:date"/>
<xsd:element name="acv_ligne" type="xsd:integer"/>
<xsd:element name="acv_boucle_traduit" type="xsd:string"/>
<xsd:element name="acv_boucle_inter" type="xsd:string"/>
<xsd:element name="acv_prix" type="xsd:double"/>
<xsd:element name="acv_date_scan" type="xsd:date"/>
<xsd:element name="acv_heure_scan" type="xsd:time"/>
<xsd:element name="acv_date_envoi" type="xsd:date"/>
<xsd:element name="acv_heure_envoi" type="xsd:time"/>
<xsd:element name="acv_envoi" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>


2 - Création du XML avec parcours de la requête:

// DECLARATION DES VARIABLES
cMonDoc est un XMLDocument <Description="achat_veau.xsd">
sMonNomFichierXML est une chaîne
xmlUnNoeud est un xmlNoeud
i est un entier


// INITIALISATION DES VARIABLES
sMonNomFichierXML = "achat_veau_" + DateVersChaîne(DateSys(),"AAAAMMJJ") + HeureVersChaîne(HeureSys(),"HHMMSS") + ".xml"
i = 1

// BOUCLE DE PARCOURS DE L'ENSEMBLE DES ACHAT VEAUX A TRANSFERER
HExécuteRequête(REQ_SELECT_Achat_veau_A_Envoyer,hRequêteDéfaut)
SI HNbEnr(REQ_SELECT_Achat_veau_A_Envoyer) > 0 ALORS

// INITIALISATION DU 1ER NOEUD XML
xmlUnNoeud..Nom = "achat_veaux"
Ajoute(cMonDoc, xmlUnNoeud)

// LECTURE ET PARCOURS
HLitPremier(REQ_SELECT_Achat_veau_A_Envoyer)
TANTQUE HTrouve(REQ_SELECT_Achat_veau_A_Envoyer) // TODO

xmlUnNoeud..Nom = "achat_veau"
Ajoute(cMonDoc.achat_veaux, xmlUnNoeud)

cMonDoc.achat_veaux.achat_veau[i].acv_id = REQ_SELECT_Achat_veau_A_Envoyer.acv_id
cMonDoc.achat_veaux.achat_veau[i].frn_id= REQ_SELECT_Achat_veau_A_Envoyer.frn_id
cMonDoc.achat_veaux.achat_veau[i].ach_id = REQ_SELECT_Achat_veau_A_Envoyer.ach_id
cMonDoc.achat_veaux.achat_veau[i].acv_date = REQ_SELECT_Achat_veau_A_Envoyer.acv_date
cMonDoc.achat_veaux.achat_veau[i].acv_ligne = REQ_SELECT_Achat_veau_A_Envoyer.acv_ligne
cMonDoc.achat_veaux.achat_veau[i].acv_boucle_traduit = REQ_SELECT_Achat_veau_A_Envoyer.acv_boucle_traduit
cMonDoc.achat_veaux.achat_veau[i].acv_boucle_inter = REQ_SELECT_Achat_veau_A_Envoyer.acv_boucle_inter
cMonDoc.achat_veaux.achat_veau[i].acv_prix = REQ_SELECT_Achat_veau_A_Envoyer.acv_prix
cMonDoc.achat_veaux.achat_veau[i].acv_date_scan = REQ_SELECT_Achat_veau_A_Envoyer.acv_date_scan
cMonDoc.achat_veaux.achat_veau[i].acv_heure_scan = REQ_SELECT_Achat_veau_A_Envoyer.acv_heure_scan
cMonDoc.achat_veaux.achat_veau[i].acv_date_envoi = DateSys()
cMonDoc.achat_veaux.achat_veau[i].acv_heure_envoi = HeureSys()
cMonDoc.achat_veaux.achat_veau[i].acv_envoi = "T"

//cMonDoc.achat_veau.acv_id = REQ_SELECT_Achat_veau_A_Envoyer.acv_id
//cMonDoc.achat_veau.frn_id = REQ_SELECT_Achat_veau_A_Envoyer.frn_id
//cMonDoc.achat_veau.ach_id = REQ_SELECT_Achat_veau_A_Envoyer.ach_id
//cMonDoc.achat_veau.acv_date = REQ_SELECT_Achat_veau_A_Envoyer.acv_date
//cMonDoc.achat_veau.acv_ligne = REQ_SELECT_Achat_veau_A_Envoyer.acv_ligne
//cMonDoc.achat_veau.acv_boucle_traduit = REQ_SELECT_Achat_veau_A_Envoyer.acv_boucle_traduit
//cMonDoc.achat_veau.acv_boucle_inter = REQ_SELECT_Achat_veau_A_Envoyer.acv_boucle_inter
//cMonDoc.achat_veau.acv_prix = REQ_SELECT_Achat_veau_A_Envoyer.acv_prix
//cMonDoc.achat_veau.acv_date_scan = REQ_SELECT_Achat_veau_A_Envoyer.acv_date_scan
//cMonDoc.achat_veau.acv_heure_scan = REQ_SELECT_Achat_veau_A_Envoyer.acv_heure_scan
//cMonDoc.achat_veau.acv_date_envoi = DateSys()
//cMonDoc.achat_veau.acv_heure_envoi = HeureSys()
//cMonDoc.achat_veau.acv_envoi = REQ_SELECT_Achat_veau_A_Envoyer.acv_envoi
i++
HLitSuivant(REQ_SELECT_Achat_veau_A_Envoyer)

FIN


Info(XMLConstruitChaîne(cMonDoc))

// VERIFICATION DOCUMENT XML VALIDE
SI XMLDocumentValide(cMonDoc) = Vrai ALORS
XMLSauve(cMonDoc, fRepExe() + ["\"] + sMonNomFichierXML)
SI ErreurDétectée = Vrai ALORS
Erreur("Impossible de sauvegarder le document XML", ErreurInfo())
SINON
Info("OK", fRepExe() + ["\"] + sMonNomFichierXML)
FIN
SINON
Erreur("Le document XML est invalide", ErreurInfo())
FIN
FIN