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

C# Discussion :

traitement de fichiers xml


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 44
    Points
    44
    Par défaut traitement de fichiers xml
    Bonjour,
    Un fournisseurs de composants nous remets des fichiers xml contenant des mesures.
    On m'a demandé de créer un prgm [C#] permettant l'import de ces données dans une DB [sql server]. La / les table/s est/sont à définir/s.

    Je sais pas trop comment m'y prendre. Les fichiers xml sont conséquents. J'ai générer un fichier xsd à partir d'un fichier xml mais selon le schéma obtenu, j'aurais pas loin de 30 tables à créer [?].

    Est-ce que le fichier xsd est modifiable ? [Pour moi, un fichier = 1 ligne dans une table]. Je suis un parfait ignorant en la matière.

  2. #2
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Des pistes pour faire ça au mieux :
    Pour la partie XML -> C# :
    - définir le modèle métier utilisé par les flux XML dans une XSD,
    - générer l'implémentation C# de ce modèle via "xsd.exe", outil fourni avec le SDK de Visual Studio,
    - utiliser l'XML Data Binding du framework pour générer les entités métiers à partir des flux.

    Pour la partie C# -> BDD :
    - utiliser un framework ORM comme Entity Framework pour un mapping automatique des entités en base.


    Ca c'est la bonne façon de faire, mais qui peut être un peu complexe.
    Tout dépend du temps et du savoir-faire disponible.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 44
    Points
    44
    Par défaut
    Merci de ta réponse ! mais je ne t'ai pas suivi.

    J'ai utilisé "xsd.exe" mais lorsque j'ouvre le diagramme obtenu, il est monstrueux [+ de 30 tables]. Et du coup l'utilisation du Dataset ainsi obtenu n'est pas possible. comment puis-je faire pour le simplifier ?

    Un fichier xml ne contient les valeurs que pour un composant acheté chez notre fournisseur.


    J'imaginais plutôt repérer les balises pertinentes, stocker les valeurs et à la fin appeler une procédure stockée. [un composant = un fichier xml]

  4. #4
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Si toutes les données ne sont pas pertinentes, alors un parsing XML en mode SAX devrait être optimum.

    Mais s'il y a beaucoup de données hiérarchiques à gérer, la procédure décrite au dessus assurera une meilleure maintenabilité.
    Cependant elle est vraiment aisée à mettre en oeuvre si les flux XML ont été eux-mêmes bien conçus.
    Le fournisseur ne fournit pas un schéma XML .xsd pour ses flux ?

    Si c'est le cas alors il est possible, via "xsd.exe", de générer une hiérarchie de classes, qui permettra un chargement transparent des données par la couche XML data binding du framework.

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 44
    Points
    44
    Par défaut
    Il n'y a pas de hiérarchie à gérer. Elle existe cependant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <JPB_HEADER>
      <CUSTOMER> ... </CUSTOMER>
      <DESIGN> ... </DESIGN 1>
      ...
    </JPB_HEADER>
    <CRITICAL_DIM>
       ...
       ...
       ...
    </CRITICAL_DIM>
    ...
    ...
    Mais elle ne m'apporte rien. Je voudrais pouvoir, par le xsd, générer mon dataset afin de ne pas devoir écrire les 250 paramétres à la main. :-/
    ... ni devoir créér manuellement ma table avec les 250 colonnes...

  6. #6
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    S'il n'y a que des flux XML alors il est possible comme tu as fait de faire du reverse engineering; mais comment être sûr que les flux XML sont représentatifs de la véritable hiérarchie ?
    Alors qu'en partant d'un schéma conçu pour représenter le modèle de données, on est sûr d'avoir la totalité de l'information.

    Quoi qu'il en soit tu peux partir de ce "xsd" pour générer une hiérarchie de classe avec "xsd.exe" et le flag "/classes".
    Ces classes seront annotées et pourront donc être utilisée directement dans un contexte de mapping XML/Objet.

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 44
    Points
    44
    Par défaut
    Merci seriousme pour tes réponses.
    Finalement et par manque de temps, je stocke toutes les valeurs dans un string[],

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    while (read_xml.Read())
    {
         switch (read_xml.NodeType)
          {
                case XmlNodeType.Text: //Display the text in each element.
                     info[ind] = read_xml.Value;
                      ind = ind + 1;
                      break;
    ...
    ...
    ...et envoies les données pertinentes dans ma db.
    Ok c'est pas très propres mais ça à l'air de marcher dans mon cas. Par contre, si vous connaissez un bon tutoriel [un peu plus complexe que la fameuse collection de CDs, avec plusieurs tables] je suis preneur.
    Encore une petite question; lorsque j'ai obtenu un fichier .xsd d'un fichier xml, est-il possible d'en obtenir une requête pour la création des tables ?

    [Promis, pour la rentrée je bosse le sujet]
    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme pour traitement de fichier xml en vba, lenteurs
    Par newcodeur dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 11/09/2008, 15h57
  2. [SimpleXML] Traitement de fichier XML
    Par RasDataMan dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 26/11/2007, 11h44
  3. [XML] Code PHP pour traitement de fichier XML
    Par gaggy dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 12/09/2007, 18h44
  4. [C#] - Moulinette de traitement de fichiers XML
    Par RiderCrazy dans le forum Windows Forms
    Réponses: 23
    Dernier message: 12/07/2006, 14h58
  5. traitement de fichier XML dans une Tache planifiée
    Par marivi dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 21/06/2005, 10h40

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