DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

PV

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
WEBDEV - Code ServeurPHP
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
WEBDEV - Code ServeurPHP
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
WEBDEV - Code Serveur
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