ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Classe pour créer des fichiers XML   



L'auteur

Gregory Adam
Belgique Belgique
Membre Actif (personne physique)
# 0000001121
enregistré le 04/06/2006

Fiche personnelle


Note des membres
pas de note

Contributions > 21 - Outils

Classe pour créer des fichiers XML
# 0000000862
ajouté le 04/07/2013 12:46:37 et modifié le 07/07/2013
consulté 6849 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
set procedure to 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

do case
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
do case
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

do case
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'


do case
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

do case
case !m.success

&& ajout du type pepperNameType
case !m.xmlDocObj.AddNewType(m.typeObj)
  assert false
  success = false

endcase


&& ajout des namespace = attributs de la racine

do case
case !m.success

&& nom, type, valeur
case !m.xmlDocObj.AddAttribute(m.xmlDocObj.Root, 'xmlns:hc''string''xsdHeadCount')
  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
  do case
  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'nullnull)
    assert false
    success = false

  && ajouter divisionType a cet element
  case !m.xmlDocObj.AddAttribute(m.childId, 'division''divisionType', 98)
    assert false
    success = false
  endcase

endfor

do case
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

xmlDoc. GetString(@m.s [, lBeautify] )


www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2020.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3