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 :

Convertir CSV en XML de 6 niveaux


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 132
    Points : 59
    Points
    59
    Par défaut Convertir CSV en XML de 6 niveaux
    Bonjour,

    Je suis débutant.

    Je cherche à convertir un fichier csv en fichier XML.

    J'ai réussi à faire que 2 niveaux et je trouve pas comment on peut convertir un CSV en XML de 4 niveaux . Mon code adapté (pris sur internet et adapté) est le suivant:
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.Xml.Linq;
     
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Xml;
     
    namespace CSVToXML
    {
        /// <summary>
        /// Logique d'interaction pour MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
               /* string csvString = @"GREAL;Great Lakes Food Market;Howard Snyder;Marketing Manager;(503) 555-7555;2732 Baker Blvd.;Eugene;OR;97403;FR  
                HUNGC;Hungry Coyote Import Store;Yoshi Latimer;Sales Representative;(503) 555-6874;City Center Plaza 516 Main St.;Elgin;OR;97827;USA  
                LAZYK;Lazy K Kountry Store;John Steel;Marketing Manager;(509) 555-7969;12 Orchestra Terrace;Walla Walla;WA;99362;USA  
                LETSS;Let's Stop N Shop;Jaime Yorres;Owner;(415) 555-5938;87 Polk St. Suite 5;San Francisco;CA;94117;USA";*/
               // File.WriteAllText("MonFichier.csv", csvString);
     
                // Read into an array of strings.  
                string[] source = File.ReadAllLines("MonFichier.csv");
                XElement cust = new XElement("Root",
                    from str in source
                    let fields = str.Split(';')
                    select new XElement("Customer",
                        new XAttribute("CustomerID", fields[0]),
                        new XElement("CompanyName", fields[1]),
                        new XElement("ContactName", fields[2]),
                        new XElement("ContactTitle", fields[3]),
                        /*new XElement("Phone", fields[4]),
                        new XElement("FullAddress",
                            new XElement("Address", fields[5]),
                            new XElement("City", fields[6]),
                            new XElement("Region", fields[7]),
                            new XElement("PostalCode", fields[8]),
                            new XElement("Country", fields[9])*/
                        )
                    )
     
                    // Je cherche ici à faire CustomerID comme niveau 2 de customer et companyName comme niveau 3 , contactName comme niveau 4
     
     
                ////
     
                );
                Console.WriteLine(cust);
                richTextBox.Document.Blocks.Clear();
                richTextBox.Document.Blocks.Add(new Paragraph(new Run(cust.ToString())));
                cust.Save("fichier.xml");
            }
        }
    }
    Pourriez-vous m'aider à faire 4 niveaux de balises xml ou lieux de 2 niveaux ?

    Merci!

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 730
    Points : 5 391
    Points
    5 391
    Par défaut
    Ton histoire de niveau n'aide pas vraiment à la compréhension.
    Les niveaux servent à définir une profondeur dans l'arborescence des nœuds.
    Alors que de toute évidence tu as besoin que les nœuds CustomerID CompanyName et ContactName soit tous au même niveau au sein d'un nœud Customer.


    En extrapolant j'imagine que la structure dont tu as besoins ressemble à celle-ci :
    Code XML : 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
    25
    26
    27
    28
    29
    <?xml version="1.0" encoding="utf-8"?>
    <Customers>
      <Customer id="A">
        <CompanyName>Company</CompanyName>
        <ContactName>Toto</ContactName>
        <ContactTitle>Monsieur</ContactTitle>
        <Phone>010203040506</Phone>
        <FullAddress>
          <Adress>1, rue de quelque chose</Adress>
          <City>Un endroit merveilleux</City>
          <Region>Paradis</Region>
          <ZipCode>00000</ZipCode>
          <Country>France</Country>
        </FullAddress>
      </Customer>
      <Customer id="B">
        <CompanyName>OtherCompany</CompanyName>
        <ContactName>Popo</ContactName>
        <ContactTitle>Monsieur</ContactTitle>
        <Phone>010203040506</Phone>
        <FullAddress>
          <Adress>2, rue de quelque chose de mieux</Adress>
          <City>Un endroit encore plus merveilleux</City>
          <Region>Paradis</Region>
          <ZipCode>00000</ZipCode>
          <Country>France</Country>
        </FullAddress>
      </Customer>
    </Customers>

    Dans tous les cas, le plus simple consiste à construire une structure Object représentant ce que tu souhaite obtenir
    Ici se serait :
    Code C# : 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
    25
    26
    27
    28
    29
    [XmlRoot("Customers")]
    public class Customers : List<Customer>
    {
     
    }
     
    public class Customer
    {
        [XmlAttribute]
        public String Id { get; set; }
     
        public String CompanyName { get; set; }
        public String ContactName { get; set; }
        public String ContactTitle { get; set; }
     
        public String Phone { get; set; }
     
        public FullAddress FullAddress { get; set; }
    }
     
    public class FullAddress
    {
        public String Address { get; set; }
        public String City { get; set; }
        public String Region { get; set; }
        public String ZipCode { get; set; }
        public String Country { get; set; }
     
    }

    Ensuite tu crées le conteneur global.
    Code # : Sélectionner tout - Visualiser dans une fenêtre à part
    Customers customers = new Customers();

    Puis tu boucles en créant des items :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    customers.Add(
        new Customer {
            Id = fields[0],
            CompanyName =fields[1],
            ContactName = fields[2],
            ContactTitle = fields[3],
            Phone = fields[4],
            FullAddress = new FullAddress {
                Address = fields[5],
                City = fields[6],
                Country = fields[7],
                Region = fields[8],
                ZipCode = fields[9]
            }
        });

    Et à la fin tu sérialises :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    XmlSerializer serializer = new XmlSerializer(typeof(Customers));
    using (Stream file = new FileStream("Customers.xml", FileMode.Create, FileAccess.Write))
    {
        serializer.Serialize(file, customers);
    }

Discussions similaires

  1. [Débutant] Conversion csv to xml sur plusieurs niveaux.
    Par Exulan dans le forum C#
    Réponses: 5
    Dernier message: 24/08/2017, 10h27
  2. Convertir un fichier xml en csv
    Par tegleyt dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 21/04/2011, 17h01
  3. convertir des csv en xml
    Par bastiensoleil dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 27/04/2010, 08h48
  4. [Perl] Convertir csv en xml
    Par chills dans le forum Modules
    Réponses: 0
    Dernier message: 19/03/2010, 15h02
  5. [XML] convertir fichier CSV en XML
    Par Yudala dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 16/02/2007, 10h05

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