IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[XML] Generer un XML en suivant le plan XSD


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 12
    Points : 9
    Points
    9
    Par défaut [XML] Generer un XML en suivant le plan XSD
    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 !!

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    une question intéressante serait de savoir à quoi sert ce fichier XML parce que sa lecture et son analyse prendra autant de temps que sa construction
    s'il s'agit d'un transfert de données, cela sera plus efficace de transférer les données de la même façon qu'elle sont dans la base de données (à condition que la base soit bien structurée bien sur)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Bonsoir Mathieu
    C'est pour transférer les données mais il s'agit de transfert de données (reporting légal) entre institutions financières et l'autorité financière... donc on peut essayer de discuter mais ...
    Je peux donner le lien pour télécharger les fichiers XSD... en MP

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 12
    Points : 9
    Points
    9
    Par défaut 2 ans plus tard.... les mêmes...
    Donc voila, je remets le sujet en haut de la pile.
    Je vais sans doute recruter un freelance sur le sujet car je n'ai plus trop le temps. Donc sii quelqu'un est intéressé ...
    Je rappelle les éléments de base du problème:
    Je collecte des données par des work-flows. Chaque donnée finit stockée dans un enregistrement d'une table MySQL. Ça, c'est bon.
    Je dois ensuite construire un fichier XML qui contiendra ces données, avec un programme PHP; la structure du fichier XML suit le schéma donné par un XSD, et les données proviennent de la table remplie par les work-flows.

    La difficulté de ce que je veux faire provient du fait que je voudrais que mon programme soit indépendant du fichier XSD. En effet, j'ai un assez grand nombre de rapports a produire et je ne veux pas me retrouver avec un programme à maintenir par rapport.
    En première approche, j'ai "traduit" le schéma XSD en paramètres dans une table de configuration et j'ai un 'robot' qui suit ces paramètres. Mais c'est un peu usine a gaz et j'ai totalement squouizé un certain nombre de paramètres (maxoccurs, enumeration, ...)
    Je viens de trouver un programme xsd2xml.php d'un allemand qui a fait cela en 2015.... et puis plus rien.
    Je l'ai copieusement amélioré (il n'y avait que les types simples integer et string: j'ai rajouté bool, decimal et des types simples 'fantaisistes' en provenance de mon XSD genre AlternateTextType, UnsignedDecimal15p4Type ... et les types complexex. C'est gentil ce genre de programme mais ça marche bien avec un catalogue de 10 bouquins avec titre, auteur et prix, sur un niveau, mais quand on passe en ligue des Champions, .... ouin ouin ouin ouin ouiiiin.
    En fait ce programme génère des classes PHP qu'on peut ensuite inclure dans un programme.
    Le programme qui va inclure les classes est donc spécifique mais disons que c'est quand même intéressant car le gros du boulot d'écriture de classes est fait. Enfin... Oui, gros du boulot car juste pour vous dire, le machin m'a généré 102 fichiers de classes et sous classes PHP. Ah oui, je ne vous l'ai pas dit ? mon XSD fait 4000 lignes avec 7 niveaux de profondeurs (il y avait 3 fichiers XSD, j'ai éliminé les inclusions de fichiers XSD pour ne faire qu'un fichier car cela n'est pas prix en compte dans le programme du teuton). Il reste des instructions que je ne sais pas bien interpréter genre union (que j'ai mis en commentaire):
    <!-- <xs:simpleType name="SignedRateNA15p2Type"> -->
    <!-- <xs:union memberTypes="SignedRate15p2Type AlternateTextType"/> -->
    <!-- </xs:simpleType> -->
    Je pense que je vais réécrire a la main cette partie du XSD.

    Voilà !
    Et ça c'est le premier XSD, j'en ai potentiellement 25 comme ça. Pour le milieu financier. Fun hein ?
    Alors ?
    Quelqu'un veut venir jouer avec moi ??
    Allezzzz ! Ne me laissez pas tout seul !

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/10/2015, 00h07
  2. Generer un fichier xml à partir d'un fichier xsd en Python
    Par Nico+10) dans le forum Général Python
    Réponses: 3
    Dernier message: 24/03/2014, 08h58
  3. XML noeud suivant getNextSibling()
    Par V2AlexFacility dans le forum Android
    Réponses: 3
    Dernier message: 12/03/2013, 16h07
  4. [Editeur XML] reconnaissance suivant extension MIME
    Par JMLLB dans le forum NetBeans
    Réponses: 4
    Dernier message: 09/07/2007, 15h19
  5. [Conception] Créer XML en suivant un XSD
    Par Orthonic dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 22/01/2007, 22h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo