Classe pour créer des fichiers XML
# 0000000862
ajouté le 04/07/2013 12:46:37 et modifié le 07/07/2013
consulté 10245 fois
Niveau
débutant
Version(s) Foxpro : VFP 9.0
Le téléchargement des pièces jointes est limité aux membres Veuillez vous identifier ou vous inscrire si vous n'avez pas encore de compte ...
Description
Classe qui permet de
construire une arborescence XML en mémoire
de transformer cette arborescence sous forme de chaine ou fichier
Ne vous occupez plus de l'encodage UTF, fputs(), textmerge, etc mais concentrez-vous sur la structure même
Code source :
&& exemple setprocedureto xmlx additive
#define true .t.
#define false .f.
local success
success = true
local xmlDocObj, fileXml, rootnodeName, typeObj
fileXml = 'd:\tmp\1.xml'
rootnodeName = 'hc:HeadCount'&& nom de la racine
docase case !m.success
&& creation du document + racine case !Xmlx_NewObject_Document(@m.xmlDocObj, m.rootnodeName) assert false
success = false
endcase
&& creation d'un nouveau type 'divisionType' base: integer docase case !m.success
&& creation d'un nouveau type 'divisionType' base: integer case !m.xmlDocObj.GetNewType(@m.typeObj, 'integer', 'divisionType') assert false
success = false
otherwise && restrictions : entre 20 et 98
typeObj.MinIncl = 20
typeObj.MaxExcl = 99
endcase
docase case !m.success
&& ajout du type divisionType case !m.xmlDocObj.AddNewType(m.typeObj) assert false
success = false
endcase
&& creation d'un deuxieme type 'pepperNameType' base: 'string'
docase case !m.success
case !m.xmlDocObj.GetNewType(@m.typeObj, 'string', 'pepperNameType') assert false
success = false
otherwise
typeObj.MinLength = 10 && longueur minimale de 10
typeObj.MaxLength = 30 && longueur maximale de 30
&& tous les noms doivent contenir 'Pepper'
typeObj.Pattern = '.*Pepper.*'
endcase
docase case !m.success
&& ajout du type pepperNameType case !m.xmlDocObj.AddNewType(m.typeObj) assert false
success = false
case !m.xmlDocObj.AddAttribute(m.xmlDocObj.Root, 'xmlns:xsi', 'string', 'http://www.w3.org/2001/XMLSchema-instance') assert false
success = false
endcase
local parentId, childId, i
parentId = m.xmlDocObj.Root
for i = 1 to 2 docase case !m.success exit
&& creation d'un element avec texte case !m.xmlDocObj.AddElement(@m.childId, m.parentId, 'Name', 'pepperNameType', 'Waldo Pepper_'+transform(m.i)) assert false
success = false
&& ajouter un atttribut a cet element: division = '20' case !m.xmlDocObj.AddAttribute(m.childId, 'division', 'divisionType', 20) assert false
success = false
&& ajouter la date de naissance a cet element case !m.xmlDocObj.AddElement( , m.childId, 'BirthDate', 'date', date()) assert false
success = false
&& creation d'un element sans texte ( <SansTexte><divisionType>98</divisionType></SansTexte> ) case !m.xmlDocObj.AddElement(@m.childId, m.parentId, 'SansTexte', null, null) assert false
success = false
&& ajouter divisionType a cet element case !m.xmlDocObj.AddAttribute(m.childId, 'division', 'divisionType', 98) assert false
success = false endcase
endfor
docase case !m.success
&& ecrire ce document case !m.xmlDocObj.ToFile(m.fileXml, false) assert false
success = false
&& optionel pour le developpement && ecrire le doc sous fichier texte pour inspection visuelle && avec trop de TABs et CRLF case !m.xmlDocObj.ToFile(forceext(m.fileXml, 'txt'), true) assert false
success = false
endcase
Commentaires
le 06/07/2013, Gregory Adam a écrit : Si fractionDigits est spécifié, on retrouvera exactement autant de chiffres après le séparateur décimal
le 07/07/2013, Gregory Adam a écrit : Correction de quelques bugs
le 07/01/2015, Thibaut a écrit : Bonjour Gregory, Comment peut-on récupérer directement le xml sous forme de chaine ?
le 07/01/2015, Gregory Adam a écrit : C'est dans la doc - page 12
Si fractionDigits est spécifié, on retrouvera exactement autant de chiffres après le séparateur décimal