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 |