CSV to XML

Résolu
angrodmadje Messages postés 17 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 27 juillet 2009 - 28 janv. 2009 à 10:50
angrodmadje Messages postés 17 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 27 juillet 2009 - 29 janv. 2009 à 12:10
Bonjour tout le monde

voici mon problème :
j'ai un fichier CSV que je dois transformer en XML, jusque là pas de soucis, ça marche, sauf que dans le CSV il y a des caractères (des espaces en l'occurence) dont je ne me sers pas et qui se retrouve donc dans mon fichier XML sous la forme "_X0200_" (symbolisation de l'espace dans les balises XML)
j'ai bien essayé la fonction Trim() en passant en paramèrtre toutes les manières de symboliser un espace, mais rien n'y fait...

voilà ce que ça donne :
 
    <Libelle_x0020_pays>EMIR.A.U</Libelle_x0020_pays>
    <_x0020_Date_x0020_validit_xFFFD__x0020_>01/01/2009</_x0020_Date_x0020_validit_xFFFD__x0020_>
    <cours_x0020__x0020__x0020__x0020_>4.74778</cours_x0020__x0020__x0020__x0020_>
    <code_x0020_monnaie>AED</code_x0020_monnaie>
    <_x0020_commentaire />
 

code :
    class csvToXml
    {
        public static void Main()
        {
            string pathSource = @"c:\test\TAUX.csv";
            string pathDestination = @"c:\test\TAUX.xml";
            ConvertCSVToXML cCSV2XML = new ConvertCSVToXML();
            cCSV2XML.convert(pathSource,pathDestination);
        }

        public class ConvertCSVToXML
        {
            private string _root = "liste";
            private string _node = "pays";
            private char _separator = ';';

            public bool convert(string pathSource, string pathDestination)
            {
                char[] trimChar = new char[4];
                trimChar[0] = ' ';
                trimChar[1] = '\x0020';
                trimChar[2] = '\u0020';
                trimChar[3] = (char)20;
                StreamReader stream = null;
                string[] saEntetes = null;
                string sLigne = "";

                // Initialisation des DataSet et DataTable
                DataSet csvDataSet = null;
                DataTable csvDataTable = null;
                try
                {
                    csvDataSet = new DataSet(_root);
                    csvDataTable = new DataTable(_node);
                    // Lecture du fichier CSV ligne par ligne
                    stream = new StreamReader(pathSource, true);
                    sLigne = stream.ReadLine().Trim(trimChar);
                    sLigne.Replace(" ", null);
                    sLigne.Replace("é","e");
                    // En tenant compte du séparateur
                    sLigne = sLigne.Trim(trimChar);
                    saEntetes = sLigne.Split(_separator);
                  
                    // Suppression des espaces avant et après le libellé des entêtes
                    saEntetes.ToString().Trim(trimChar);
                    for (int i = 0; i < saEntetes.Length; i++)
                    {
                        Console.WriteLine(sLigne);
                        csvDataTable.Columns.Add(saEntetes[i]).ToString();
                    }

                    sLigne = stream.ReadLine().Trim(trimChar);
                    while (sLigne != null)
                    {
                        csvDataTable.Rows.Add(sLigne.Split(_separator));
                        sLigne = stream.ReadLine();
                    }

                    csvDataSet.Tables.Add(csvDataTable);
                    csvDataSet.WriteXml(pathDestination);
                    return true;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    return false;
                }

                finally
                {
                    stream.Close();
                    if (csvDataSet != null) csvDataSet.Dispose();
                    if (csvDataTable != null) csvDataTable.Dispose();
                }
            }
        }
    }

merci d'avance

1 réponse

angrodmadje Messages postés 17 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 27 juillet 2009
29 janv. 2009 à 12:10
problème résolu, il faut faire le trim sur :

                    for (int i = 0; i < saEntetes.Length; i++)
                    {
                        Console.WriteLine(sLigne);
                        csvDataTable.Columns.Add(saEntetes[i]).Trim().ToString();
                    }

voilà voilà
merci à tous ;)
3