DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Fonctions WLangage / Fonctions standard / Fonctions de gestion des fichiers XML
  • Exemple de manipulation d'un fichier XML
  • Recherche de factures dans un fichier XML
  • Affichage du contenu d'un document XML
XMLDocument (Exemple)
Exemple de manipulation d'un fichier XML
Etats et Requêtes
Cet exemple permet de d'ajouter 2 factures dans un fichier XML et de les sauver.
sMonDocXML est une chaîne = "XML"
sInfoXML est une chaîne // Chaîne résultat
nIndice est un entier
nPositionXML est un entier
 
XMLDocument(sMonDocXML, "") // Crée un document XML vierge
 
// Facture 1
// ----------
// Elément Racine
XMLAjouteFils(sMonDocXML, "LISTE_DE_FACTURES", "", Vrai)
// Noeud "Père"
XMLAjouteFils(sMonDocXML, "FACTURE", "", Vrai)
 
// Infos sur le facture
XMLAjouteFils(sMonDocXML, "NUMERO", NumériqueVersChaîne(123))
XMLAjouteFils(sMonDocXML, "TOTAL", NumériqueVersChaîne(420.50))
XMLAjouteFils(sMonDocXML, "TVA", NumériqueVersChaîne(19.6))
XMLAjouteFils(sMonDocXML, "NOTES", "Informations sur la facture 123")
 
// Détail des lignes de FACTURE :
POUR nIndice = 1 À 5
XMLAjouteFils(sMonDocXML, "LIGNE_FACTURE", ...
NumériqueVersChaîne(nIndice), Vrai)
XMLAjouteFils(sMonDocXML, "DESCRIPTION", ...
"Description ligne " + nIndice)
XMLAjouteFils(sMonDocXML, "MONTANT", NumériqueVersChaîne(84.25))
// Remonte d'un niveau pour la prochaine ligne (ou pour la suite)
XMLParent(sMonDocXML)
FIN
 
// Facture 2
// -----------
XMLParent(sMonDocXML)
 
// Remonte d'un niveau pour se mettre au même niveau que la facture précédente
// OU ici XMLRacine(sMonDocXML) car il n'y a plus qu'un niveau
XMLAjouteFils(sMonDocXML, "FACTURE", "", Vrai) // Noeud "Père"
XMLAjouteFils(sMonDocXML, "NUMERO", NumériqueVersChaîne(456))
 
// Infos sur le facture
XMLAjouteFils(sMonDocXML, "TOTAL", NumériqueVersChaîne(420.50))
XMLAjouteFils(sMonDocXML, "TVA", NumériqueVersChaîne(5.5))
XMLAjouteFils(sMonDocXML, "NOTES", "Informations sur la facture 456")
 
// Détail des lignes de FACTURE :
POUR nIndice = 1 À 10
// Sauve la position en cours
nPositionXML = XMLSauvePosition(sMonDocXML)
XMLAjouteFils(sMonDocXML, "LIGNE_FACTURE", ...
NumériqueVersChaîne(nIndice), Vrai)
XMLAjouteFils(sMonDocXML, "DESCRIPTION", "Description ligne " + nIndice)
XMLAjouteFils(sMonDocXML, "MONTANT", NumériqueVersChaîne(42.5))
// Autre moyen par rapport à XMLParent
// Restaure la position pour la prochaine ligne (ou pour la suite)
XMLRetourPosition(sMonDocXML, nPositionXML)
FIN
 
sInfoXML = XMLConstruitChaîne(sMonDocXML) // Récupère le XML construit
XMLTermine(sMonDocXML) // Libère le document XML
 
// Création du fichier XML
fSauveTexte(ComplèteRep(fRepExe()) + "Facture.xml", sInfoXML)
// Affichage dans l'appli associée au XML
LanceAppliAssociée(ComplèteRep(fRepExe()) + "Facture.xml")
Recherche de factures dans un fichier XML
Etats et Requêtes
Cet exemple permet de lire et de rechercher une facture dans un fichier XML de type Facture / Ligne de facture.
sMonDocXML est une chaîne = "XML"
sInfoXML est une chaîne
 
// Chargement du fichier XML dans une chaîne
sInfoXML = fChargeTexte(ComplèteRep(fRepExe()) + "Facture.xml")
 
// Initialisation des fonctions XML sur ce fichier
XMLDocument(sMonDocXML, sInfoXML)
 
// on se positionne sur la racine
XMLRacine(sMonDocXML)
 
// Lecture en recherchant les factures et les infos
//  de ces factures (structure du fichier XML connue)
BOUCLE
// Recherche d'une "Facture" dans les éléments et/ou sous éléments
XMLRecherche(sMonDocXML, "FACTURE", XMLElément + ...
XMLSousElément + XMLContinue, ...
XMLIgnoreLaCasse + XMLExact)
SI XMLTrouve(sMonDocXML) = Faux ALORS SORTIR
// On a trouvé une facture
// Informations sur la facture
XMLFils(sMonDocXML)
XMLPremier(sMonDocXML)
TANTQUE PAS XMLEnDehors(sMonDocXML)
SELON XMLNomElément(sMonDocXML)
CAS "NUMERO"
Trace("Facture n° " + XMLDonnée(sMonDocXML))
CAS "TOTAL"
Trace("Montant facture : " + ...
XMLDonnée(sMonDocXML))
CAS "TVA"
Trace("TVA " + XMLDonnée(sMonDocXML))
CAS "NOTES"
Trace("Notes : " + XMLDonnée(sMonDocXML))
CAS "LIGNE_FACTURE"
// Détail des lignes de la facture en cours
// Informations sur une ligne de la facture
XMLFils(sMonDocXML)
XMLPremier(sMonDocXML)
TANTQUE PAS XMLEnDehors(sMonDocXML)
SELON XMLNomElément(sMonDocXML)
CAS "NUMERO"
Trace("Facture n° " + ...
XMLDonnée(sMonDocXML))
CAS "MONTANT"
Trace("Montant ligne : " + ...
XMLDonnée(sMonDocXML))
CAS "DESCRIPTION"
Trace("Description ligne : " + ...
XMLDonnée(sMonDocXML))
AUTRE CAS
// Ne récupère pas
// les autres infos de la ligne
// Remonte au détail facture
XMLParent(sMonDocXML)
FIN
XMLSuivant(sMonDocXML)
FIN
// Remonte au niveau du détail de la facture
XMLParent(sMonDocXML)
  AUTRE CAS
// Ne récupère pas les autres infos de la facture
 FIN
 XMLSuivant(sMonDocXML)
FIN
// On remonte au niveau de la facture
XMLParent(sMonDocXML)
FIN
// Annule la recherche
// pour les autres éventuelles fonctions XML utilisées par la suite
XMLAnnuleRecherche(sMonDocXML)
XMLTermine(sMonDocXML) // Libère le document XML
Info("Parcours des factures terminé")
Affichage du contenu d'un document XML
Etats et Requêtes
L'exemple suivant permet d'afficher un document XML dans une trace avec son arborescence. Cet exemple correspond à une procédure qui peut être appelée à tout moment. Cette procédure a pour syntaxe : ParcoursXML(<sDocXML> [, <nNiveau>]) où :
  • <sDocXML> correspond au document XML à manipuler (initialisé avec XMLDocument)
  • <nNiveau> (par défaut 0) correspond au niveau de l'arborescence XML.
sDocXML est une chaîne = "DocXML"
sXML est une chaîne = fChargeTexte("C:\MonFichier.xml")
// Initialise le document XML
SI XMLDocument(sDocXML, sXML) = Faux ALORS
// Document non valide
Erreur()
FIN
// On se positionne sur la racine
XMLRacine(sDocXML)
// On parcourt le document
ParcoursXML(sDocXML)
// On termine le document
XMLTermine(sDocXML)
PROCÉDURE ParcoursXML(sDocXML, nNiveau=0)
nPositionXML est un entier
sInfoTrace est une chaîne
bBalise est un booléen
sDonnées est une chaîne
// Parcours de tous les éléments
XMLPremier(sDocXML)
TANTQUE PAS XMLEnDehors(sDocXML)
// Récupère les données de l'élément
sDonnées = XMLDonnée(sDocXML)
// De quel type d'éléments s'agit-il ?
SELON XMLTypeElement(sDocXML)
 CAS XMLAttribut
  // Attribut affiché entre côtes
  sInfoTrace = Répète("-", 2*nNiveau) + ...
"'" + XMLNomElément(sDocXML) + "'"
 CAS XMLBalise  
  // Attribut affiché entre < et >
  sInfoTrace = Répète("-", 2*nNiveau) + ...
"<" + XMLNomElément(sDocXML) + ">"
  bBalise = Vrai
 AUTRE CAS // dont CAS XMLErreur
  // Rien
 sInfoTrace = "Erreur XML"
FIN
// Il y a des données pour cet élément ?
SI ChaîneFormate(sDonnées, ccSansPonctuationNiEspace + ...
ccSansEspace + ccSansAccent) = "" ALORS
// Pas de données donc affichage de nom de l'élément seul
Trace(sInfoTrace)
SINON
  // Des données
// Affichage du nom de l'élément avec sa valeur
  Trace(sInfoTrace + " = " + sDonnées)
FIN
// Il y a des balises ou des attributs pour cet élément ?
SI XMLFilsExiste(sDocXML, XMLBalise + XMLAttribut) = Vrai ALORS
// Sauve la position actuelle
nPositionXML = XMLSauvePosition(sDocXML)
// Se positionne sur le fils
XMLFils(sDocXML)
// Parcourt le fils
ParcoursXML(sDocXML, nNiveau+1)
// Se repositionne comme avant le positionnement sur le fils
XMLRetourPosition(sDocXML, nPositionXML, XMLRPDéfaut)
  FIN
  // Si c'était une balise, on affiche la "balise fermante"
  SI bBalise = Vrai ALORS Trace(sInfoTrace)
// Suite du XML
XMLSuivant(sDocXML)
FIN
Version minimum requise
  • Version 9
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