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 :

Parser fichier XML


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 38
    Par défaut Parser fichier XML
    Bonjour,

    Je développe une application en C# qui permet de récupérer le temps de communication d'une personne sur un mois donné par rapport à son numéro de téléphone.
    Le soucis est que mon application a l'air de fonctionner SAUF sur UN SEUL fichier ! "Une exception non gérée du type 'System.NullReferenceException' s'est produite dans Parse_Ticket_Collector.exe"

    Ma fonction :

    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
     //on charge le fichier:
                var doc = XDocument.Load(userSelectedFilePath);
     
                string month = dateTimePicker1.Value.ToString("yyyy-MM");
                string format = "yyyy-MM";
                var value = DateTime.ParseExact(month, format, CultureInfo.InvariantCulture, DateTimeStyles.None);
                label4.Text = value.ToString("yyyy-MM"); //Test format date
     
                //on fait une requete linq sur le fichier:
                // on sélectionne tous les appels de l'utilisateur renseigner dans la textBox et le datePicker
     
                var number = from call in doc.Root.Elements("CallAccounting")
                             where call.Element("ChargedUserID").Value == textBox2.Text && DateTime.Parse(call.Element("Date").Value).ToString("yyyy-MM") == dateTimePicker1.Value.ToString("yyyy-MM")
                             select call;
     
                var moyenne = number.Sum(call => TimeSpan.Parse(call.Element("CallDuration").Value).TotalSeconds);
                TimeSpan t = TimeSpan.FromSeconds(moyenne);
                string answer = string.Format("{0:D2}h:{1:D2}m:{2:D2}s",
                       t.Hours,
                       t.Minutes,
                       t.Seconds);
                listView1.Items.Add("Temps de communication : " + answer);
    J'ai testé le fichier sur xml validator et apparemment il n'y a pas de problème...

    Merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Par défaut
    Salut,

    Il nous manque la ligne qui a provoquée ton erreur.

    Mais a vu de nez, c'est un nœud XML qui n'existe pas dans ton fichier... Et donc quand tu fais le ".Value" d'un objet qui n'existe pas --> NullReferenceException

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 38
    Par défaut
    Ah oui désolé j'ai oublié de préciser la ligne !

    where call.Element("ChargedUserID").Value == textBox2.Text && DateTime.Parse(call.Element("Date").Value).ToString("yyyy-MM") == dateTimePicker1.Value.ToString("yyyy-MM")

    C'est bizarre que ce noeud n'existe pas vu que les fichiers xml sont générés par le server PABX, donc ils sont identiques mais il n'y a qu'un seul fichier qui ne veut pas se laisser parser

  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 : 39
    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
    Par défaut
    Je pense que tu es bon pour une petite session de debug : lance ton programme en debug et inspecte chacune des valeurs pouvant être null : call.Element("ChargedUserID") et call.Element("Date").

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 38
    Par défaut
    Hmm oui, lancer l'application en debug pas de soucis mais comment faire pour inspecter les valeurs null ?! (J'utilise visual studio)

  6. #6
    Membre émérite
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Par défaut
    Alors pour raccourcir un peu le debug :
    Voici une requête qui te renverra les lignes qui posent problèmes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                var getProbleme = from call in doc.Root.Elements("CallAccounting")
                             where !call.Elements("ChargedUserID").Any() || !call.Elements("Date").Any()
                             select new
                             {
                                 IsChargedUserIDNull = !call.Elements("ChargedUserID").Any(),
                                 IsDateNull = !call.Elements("Date").Any()
                             };

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

Discussions similaires

  1. parser fichier xml
    Par debutant_linux dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 24/10/2007, 18h44
  2. [glib] parser fichier xml
    Par .:dev:. dans le forum C
    Réponses: 10
    Dernier message: 18/07/2006, 00h00
  3. [DOM] Erreur parser fichier xml avec caractère spéciaux
    Par turcotm dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 19/06/2006, 09h01
  4. [XML] [EXPAT] Parser fichier XML
    Par Ben42 dans le forum Bibliothèques et frameworks
    Réponses: 12
    Dernier message: 17/02/2006, 14h08
  5. [XSL] Parser fichier xml : erreurs + incompréhensions
    Par totobouchon dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 19/07/2005, 15h47

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