Bonjour,
J'ai conscience que cette demande a sans doute été mainte fois abordée mais après avoir écumé tous les forum, je n'ai pour l'instant trouvé aucune réponse satisfaisante.
L'environnement technique requis PHP7, librairies XML simple ou DOM, MySQL.
Le problème:
Je dois transformer un rapport réglementaire financier dont chaque case est bien numérotée (un peu comme une déclaration pour vos impôts) en fichier XML.
Pour ce faire on me fournit un fichier XSD (un truc invraisemblable, schema sur 2 fichiers avec des types complexes sur 3 ou 4 niveaux).
Pour l'instant ma solution fonctionne mais on dirait du code Algol ou Pacal d'autrefois...
J'ai créé un fichier de paramètres qui donne pour chaque case du rapport le tag et le chemin complet du tag dans la structure XML cible. Comme la structure est à 10 ou 12 niveau parfois je suis obligé de faire des requêtes sur cette table avec de véritables textes (chemin de tags) a rechercher dans mySQL... les performances sont très médiocres.
Ensuite j'ai parsé le XSD comme si c'etait un XML et je me "ballade dedans" avec des fonctions récurrentes, en construisant ainsi petit a petit l'empilement de tags puis leur fermeture en dépilant la récurrence... un peu comme l'algorithme du jeu des tours de hanoi en Pascal pour ceux qui se souviennent...
Quand j'arrive au bout d'une branche je recherche si dans les données financières j'ai une valeur dont la référence convertie en chemin de tags correspond au chemin ou je suis.
Bref c'est moyen bof, et surtout c'est compliqué a appliquer certains attributs comme : ce tag doit exister 5 fois exactement (donc remplir par exemple avec des 0 comme valeur par défaut si je n'ai pas de donnée a rapporter, ce tag est facultatif, il doit exister une fois seulement ou une fois au moins, la valeur doit être dans la liste de valeurs autorisées, ....).
Quand j'ai fini de générer mon XML, j'utilise SchemaValidate et hop ! en une fonction, PHP me dit si le fichier est conforme ou pas...
Donc je me dis qu'il y a peut être quelques fonctions qui me rendraient la vie plus facile ....
Mon code fait environ 400 lignes pour l'instant... je vous en fait grâce.
Des idees? des conseils ?
Mon xsd est trop complexe pour xsd2xml.com, et je altova ne fait pas de php, ne peut être intégré a une application web.
Question subsidiaire : Y aurait-il des avantage à passer par json ?
Merci !!
Partager