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

VB.NET Discussion :

Modification de la structure d'un fichier XML


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Directeur de projet
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Par défaut Modification de la structure d'un fichier XML
    Bonjour à tous,

    Existe-t-il une méthode 'optimale' de modifier la structure d'un fichier XML ?

    En pratique , j'ai un fichier du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <Biblio>
    <Romans>
    <Livre>
    <Titre>Alpha</Titre>
    <Auteur>Dupont Bernard</Auteur>
    </Livre>
     
    <Livre>
    <Titre>Gamma</Titre>
    <Auteur>Dumont Albert</Auteur>
    </Livre>
    </Romans>
     
    <Histoire>
    <Livre>
    <Titre>Beta</Titre>
    <Auteur>Dumont Albert</Auteur>
    </Livre>
    </Histoire>
     
    </Biblio>
    Et j'aimerais le transformer en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <Biblio>
    <Rayon localisation="sud">
    <Romans>
    <Livre>
    <Titre>Alpha</Titre>
    <Auteur>Dupont Bernard</Auteur>
    </Livre>
     
    <Livre>
    <Titre>Gamma</Titre>
    <Auteur>Dumont Albert</Auteur>
    </Livre>
    </Romans>
    </Rayon>
     
    <Rayon localisation="nord">
    <Histoire>
    <Livre>
    <Titre>Gamma</Titre>
    <Auteur>Dumont Albert</Auteur>
    </Livre>
    </Histoire>
     
    </Biblio>

  2. #2
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Qu'entendez vous par "méthode 'optimale'" ?

    Un classe ou une dll qui gérerait toute seul la modification de structure d'un fichier xml ?
    Genre : "Insert telle balise entre ces deux balises ?"

    Et bien non.

    Après, suivant la situation, on peut toujours écrire du code qui ferait le travail tout seul.
    Si par exemple cela concerne les mêmes modifications sur plein de fichiers, alors il est possible d'écrire du code modifier les fichiers ou en générer de nouveaux.

    Par exemple :

    - Lire le fichier, en tant que fichier texte, ligne par ligne, et insérer ce qu'il faut quand il faut.

    - Ou encore deserializer un fichier xml dans une classe pour récupérer les données, mapper ces données dans une autre classe serializable (avec la nouvelle structure), et sérializer la nouvelle classe dans un nouveau fichier xml pour avoir la nouvelle structure.

    - Il y a aussi en utilisant le Regex j'imagine (un peu plus compliqué quand même).

    Plein de solutions, tout dépends des paramètres de votre problème.

    PS : Comment savez vous dans quelle région ira chaque livre ? Vous avez ces infos quelques part ?

  3. #3
    Membre habitué
    Femme Profil pro
    Directeur de projet
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Par défaut
    Merci beaucoup mactwist69 pour ta réponse.

    A vrai dire, mon exemple est un peu 'simpliste' :
    En réalité, j'ai deux schémas XSD : l'un est la version actuelle(V01) des données (donc les fichiers XML d'entrée répondent forcément à ce schéma) et l'autre c'est la version future (V02) : le traitement revient donc à transposer la structure V01 vers la V02.

    A noter que les données sont strictement les mêmes (à des champs calculés près : genre somme de contrôle et date de génération du fichier)

    Ma question revient donc à dire :

    1- Dois-je passer par un format pivot : type fichier à plat champ/séparateur donc XML.V01 -> fichier CSV -> XML.V02

    2- Ou bien existe-t-il une méthode plus intéressante pour réaliser cette transformation ? (feuille de transformation mais n'est ce pas plus compliqué, notamment pour les champs calculés (sommes de contrôle) , passer par une base de données, passer par un format Excel ....

  4. #4
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Re,

    Et bien tout dépends. Il y a plusieurs paramètres à votre problème.

    Tout d'abord, il faut extraire les données, quoi qu'il arrive, donc dans le code.
    Il faut une classe qui correspond à la structure de votre xml V1.

    Une fois les données importer, deux solutions :

    1) Soit vous voulez juste transposer les données dans la nouvelle structure v2, sans nouvelles informations...
    Alors le code pourra générer ce nouveau fichier à la volée, avec les nouvelles balises vides.
    Puis vous pourriez remplir les nouvelles balises à la main.

    2) Soit vous pouvez calculer les nouvelles informations
    Alors, de la même manière, cela peut être fait à la volée.
    (Pour cela, il faut réfléchir à un moyen de calculer les données manquante, ou les trouver quelque part (autre source de données?)
    Solution idéale.

    3) Par contre, si vous devez, pour chaque élément, saisir des informations qui lui sont spécifiques...
    Alors juste du code sera impossible, enfin, plutôt inutile...
    Il vous faudra une interface pour saisir les données.

    - Soit avec du code, vous faites une interface graphique, qui permettra pour chaque éléments de saisir une information, avant d'exporter le fichier enrichis.
    - Soit, si vous n'avez pas le temps ou les compétences pour faire l'interface graphique, alors oui, mettre les données dans une base de données, ça vous permettra de saisir le données éléments par éléments via l'interface de la BDD.
    (un fichier csv ne changera pas tellement le problème par apport au xml de départ, se sera peut être plus facile pour insérer des données à la main).
    Si vous utiliser une bdd, alors, les colonnes de votre table sera au format de la V2, les données existante en V1 seront remplis, et par l'interface de la gestion de base de données, vous pourriez remplir les nouvelles colonnes vide.
    Puis re du code pour passer de la BDD en XML.

    Pas simple hein ?

  5. #5
    Membre habitué
    Femme Profil pro
    Directeur de projet
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Par défaut
    Merci Mactwist69
    En effet pas simple.
    Dans tout les cas, la saisie n'est pas souhaitable :
    • d'abord certains champs additionnels sont juste 'calculés' : sommes de contrôle de champs existant, comptage de nombre d'articles dans le fichier, et date/heure du traitement.
    • Ensuite, toutes les autres proviennent d'un fichier référentiel qui pour chaque article (défini par son code unique) informe de sa localisation. Ce fichier est plus fiable d'une saisie, et est toujours mis à jour.

    Je souhaite juste éviter de traiter les fichiers XML en tant que 'vulgaire' fichier texte : pouvoir se déplacer dans l'arbre, compter les articles, .... voir vérifier automatiquement à chaque export, la validité du fichier produit, vis à vis du schéma XSD de référence.

  6. #6
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Alors si tout est calculables...
    du 100% code pour transformer les fichiers est parfait.

    Le fichier de référentiel pourra être aussi importer dans le code, les champs à calculer seront facile à le faire...

    La seule contrainte technique, c'est de créer les deux bonnes classes suivants les deux structures xml....
    Après les calcules c'est facile, quand à l'import-export code-xml, ça se fait en une ligne de code.

    PS: si vous avez besoin de consulter le contenu des fichiers xml, il y a des outils qui permettent de voir le contenu très facilement et de manière très ergonomique.

Discussions similaires

  1. Obtention de la structure d'un fichier XML dans tXMLMap
    Par ableur dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 11/05/2015, 11h26
  2. Réponses: 2
    Dernier message: 30/11/2014, 17h30
  3. [JSON] Lire structure JSON dans fichier XML
    Par Mister Nono dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 01/04/2013, 13h04
  4. [XML] Structure d'un fichier XML
    Par Sytchev3 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 17/05/2012, 10h32
  5. [XML] Modification d'une donnée d'un fichier XML
    Par mardachris dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 15/12/2006, 19h46

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