DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Fonctions WLangage / Fonctions standard / Fonctions de gestion des fichiers XML
  • Exemple d'utilisation de la fonction XMLOuvreLecteur
XMLOuvreLecteur (Exemple)
Exemple d'utilisation de la fonction XMLOuvreLecteur
Cet exemple importe un gros fichier XML dans une table de la base.
// Syntaxe :
//[ <Résultat> = ] ImporteXML (<sNomFichierXMLaImporter> est chaîne,
// <sNomTableDestination> est chaîne)
//
// Paramètres :
// sNomFichierXMLaImporter (chaîne ANSI) : Nom du fichier XML à importer
// (un fichier du type des fichiers XML créez par la fonction HExporteXML)
// sNomTableDestination (chaîne ANSI) : Nom du fichier destination
// Valeur de retour :
// booléen : Vrai si l'import c'est fait sans erreur
//
// Exemple :
// ImporteXML("C:\Temp\FichieraImporter.xml","Commande")
//
PROCÉDURE ImporteXML(sNomFichierXMLaImporter est une chaîne,...
sNomTableDestination est une chaîne) : booléen
 
//Exemple de fichier XML traité :
// <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
// <?xml-stylesheet href="FichierAImporter.xsl" type="text/xsl"?>
//  <HF_DOCUMENT>
// <NomTable>
// <NomRubrique>ValeurRubrique</NomRubrique>
// ...
// <NomRubriqueIndice>
// <NomRubriqueIndice_1>ValeurRubriqueIndice</NomRubriqueIndice_1>
// ...
// </NomRubriqueIndice>
// ....
// </NomTable>
// ....
//  </HF_DOCUMENT>
 
// xmlEnregistrement est un xmlLecteur
xmlRacineDoc est un xmlLecteur = XMLOuvreLecteur(sNomFichierXMLaImporter)
SI ErreurDétectée ALORS
// Erreur de déclaration du fichier, on affiche l'erreur
Erreur("Echec de l'import",ErreurInfo())
RENVOYER Faux
FIN
 
ToastAffiche("Import en cours...")
//Parcours du fichier
sErreursImport est une chaîne
sNomFichier est une chaîne
sNomRubrique est une chaîne
sValeurRubrique est une chaîne
nIndice est un entier
nNbImport est un entier sans signe sur 8
//parcours les éléments de premier niveau du XML
POUR TOUT xmlRacineDoc
// Jauge
// JAUGE_Progression++
// C'est une balise de début de nom "HF_DOCUMENT" ?
SI xmlRacineDoc.Type = XMLLecteurBaliseDébut _ET_ xmlRacineDoc.Nom = "HF_DOCUMENT" ALORS
// Parcours de tous les sous-éléments (les enregistrements)
POUR TOUT xmlEnregistrement DE xmlRacineDoc
// Mmise à blanc des rubriques du fichier destination
HRAZ(sNomTableDestination)
// C'est un balise de début et pour le fichier voulu ?
SI xmlEnregistrement.Type = XMLLecteurBaliseDébut _ET_  ...
xmlEnregistrement.Nom ~= sNomTableDestination ALORS
sNomFichier=xmlEnregistrement.Nom
// Parcours des sous éléments (les rubriques)
POUR TOUT xmlRubrique DE xmlEnregistrement
SELON xmlRubrique.Type
CAS  XMLLecteurBaliseDébut
sNomRubrique = xmlRubrique..Nom
nIndice = 0
// Parcours des sous éléments (les valeurs rubriques)
POUR TOUT xmlValeurRubrique DE xmlRubrique
// C'est "à priori" pas une rubrique indicée
SI nIndice=0 _ET_ ...
xmlValeurRubrique.Type = XMLLecteurTexte ALORS
// Récupération de la valeur
sValeurRubrique = xmlValeurRubrique.Valeur
SINON
// C'est une balise de début ?
SI xmlValeurRubrique.Type = XMLLecteurBaliseDébut ALORS
// Donc c'est une rubrique indicée
// Parcours des sous-éléments
// (les valeurs rubriques indicées)
POUR TOUT xmlValeurRubriqueIndicee DE xmlValeurRubrique
// c'est bien
SI xmlValeurRubriqueIndicee.Type = ...
XMLLecteurTexte ALORS
// Valeur de l'indice suivant
nIndice++
sValeurRubrique = xmlValeurRubrique.Valeur
// Affectation de la rubrique indicée
QUAND EXCEPTION DANS
{sNomTableDestination + "." + ...
sNomRubrique, indRubrique}[nIndice]= ...
sValeurRubrique
FAIRE
// rien : c'est pour éviter une erreur
// si la rubrique n'existe pas
// dans le fichier destination
FIN
FIN
FIN
FIN
FIN
FIN
// c'était une rubrique indicée ?
SI nIndice = 0 ALORS
// non donc
QUAND EXCEPTION DANS
{sNomTableDestination+"."+ ...
sNomRubrique,indRubrique}=sValeurRubrique
FAIRE
// rien : c'est pour éviter une erreur
// si la rubrique n'existe pas dans le fichier destination
FIN
// SINON
// Rubrique indicée, c'est déjà fait
FIN
 
AUTRE CAS
// Rien
FIN
FIN  // POUR TOUT xmlRubrique
// Fin d'un enregistrement du fichier
// Ajout dans le fichier destination
SI PAS HAjoute(sNomTableDestination) ALORS
sErreursImport += HErreurInfo()
SINON
nNbImport++
FIN
FIN
FIN // POUR TOUT xmlEnregistrement
FIN
FIN
 
// Des erreurs durant l'import ?
SI sErreursImport <> "" ALORS
Erreur("Des erreurs se sont produites durant l'import : ", sErreursImport)
RENVOYER Faux
SINON
ToastAffiche("Import de "+nNbImport + " enregistrements terminé avec succès sans erreur")
RENVOYER Vrai
FIN
Version minimum requise
  • Version 23
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 25/05/2022

Signaler une erreur ou faire une suggestion | Aide en ligne locale