11 septembre 2020
publié par 

Il est quelque fois nécessaire de changer de format de données. Si on reçoit par exemple une réponse de WebService au format JSON et que l'on doit passer en paramètre à une fonction ce même résultat au format XML.


Plutôt que de déclarer les structures correspondantes, je vous propose une fonction générique qui parcours le contenu JSON pour le convertir en XML.

// Résumé : Converti un format JSON en XML

// Syntaxe :

//[ <Résultat> est un xmlDocument = ] JSONVersXML (<ObjetJSON> est JSON)

 

PROCÉDURE JSONVersXML(ObjetJSON est un JSON)

 

 

// Création des éléments du fichier xml

ObjetNoeudRacine est un xmlNoeud

ObjetXML est un xmlDocument

ObjetNoeudRacine..Nom = "root"

 

// Liste des Membres de l'objet JSON qui seront convertis en XML

ListeMembres(ObjetJSON,ObjetNoeudRacine)

 

 

 

PROCÉDURE INTERNE ListeMembres(_ObjetJSON est un JSON,_ObjetXML est un xmlNoeud)

 

// Parcours de l'objet JSON

POUR TOUT UnMemnbre DE _ObjetJSON..Membre

// Selon le type on sait si c'est un membre ou un JSON

SI UnMemnbre..Type <> wlVariantObjet ALORS

SI UnMemnbre..Type <> wlVariantTableau

// C'est un membre simple

sUnNoeud est un xmlAttribut

sUnNoeud..Nom = UnMemnbre..Nom

sUnNoeud..Valeur = UnMemnbre..Valeur

TableauAjoute(_ObjetXML..Attribut,sUnNoeud)

SINON

// C'est un membre tableau

sUnNoeud est un xmlNoeud

sUnNoeud..Nom = UnMemnbre..Nom

// On ajoute un Nœud Fils

TableauAjoute(_ObjetXML..NoeudFils,sUnNoeud)

// On ajoute un fils "element" pour chaque valeur

POUR i = 1 À UnMemnbre..Occurrence

sUnNoeudtab est un xmlNoeud

sUnNoeudtab..Nom="element"

sUnNoeudtab..Texte=UnMemnbre[i]..Valeur

TableauAjoute(_ObjetXML..NoeudFils[1]..NoeudFils,sUnNoeudtab)

FIN

FIN

SINON

// C'est un nouveau JSON

sUnNoeud est un xmlNoeud

sUnNoeud..Nom = UnMemnbre..Nom

// On ajoute un Nœud Fils

soit ind = TableauAjoute(_ObjetXML..NoeudFils,sUnNoeud)

uNJSON est un JSON = UnMemnbre..FormatJSON

// On reparcours les membres en conservant le pointeur dans le doc XML

ListeMembres(uNJSON,_ObjetXML..NoeudFils[ind])

FIN

FIN

FIN

 

 

// Ajout

TableauAjoute(ObjetXML..NoeudRacine,ObjetNoeudRacine)

 

RENVOYER ObjetXML

< Retour

Publier un commentaire : 
Votre adresse email ne sera pas publiée