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 :

supprimer des lignes dans un ficher XML


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Jean ZAY - Jarny
    Inscrit en
    Juin 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Jean ZAY - Jarny
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 25
    Points : 14
    Points
    14
    Par défaut supprimer des lignes dans un ficher XML
    Bonjour,

    je sollicite votre aide, c est à propos d'un fichier XML, enfaite j'extrais des données d'un fichier XML, qui est composer de plusieurs appels téléphonique.

    Je voudrais une fois traiter les informations d'un poste (100 par exemple ,celui-ci est contenue dans une variable tiré d'une textBox), supprimer les lignes correspondant a l'appel.

    Voici comment est composer mon fichier XML:

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <CallAccountingList>
    ...
    	<CallAccounting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CAPTicket_V001.001.xsd">*
    		<OmniPCXOffice>
    			<SoftwareVersion>3EH30369BVAA ALZQO510/023.004</SoftwareVersion>
    			<CPUIPAddress>192.168.92.246</CPUIPAddress>
    		</OmniPCXOffice>
    		<Checksum>550119011</Checksum>
    		<TicketType>Call</TicketType>
    		<ChargedUserType>A</ChargedUserType>
    		<ChargedUserID>100</ChargedUserID>
    		<SubscriberName>PO</SubscriberName>
    		<CommunicationType>Outgoing</CommunicationType>
    		<TrunkType>N</TrunkType>
    		<TrunkID>001</TrunkID>
    		<Date>2007-06-15</Date>
    		<Time>13:37:00</Time>
    		<CallDuration>00:00:25</CallDuration>
    		<TaxesAmount>0</TaxesAmount>
    		<Service>ST</Service>
    		<DialledNumber>0156412361</DialledNumber>
    		<DialledMode>M</DialledMode>
    		<RingingDuration>00:00:00</RingingDuration>
    		<Cost>0,77</Cost>
    		<Currency>EUR</Currency>
    	</CallAccounting>
    ...
    </CallAccountingList>

    CallAccounting=> Balise pour un appel

    CallAccounting=> Balise pour tout les appel



    Je traite les informations de cette façon :
    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
     XDocument xDoc = XDocument.Load("C:\\Projet\\TicketCollector.XML");// Chargement du fichier .xml
       IEnumerable<XElement> elements = xDoc.Elements("CallAccountingList").Elements("CallAccounting").Where(el => el.Element("ChargedUserID").Value == chargedUserID && el.Element("CommunicationType").Value == "Outgoing"); // Recherche des éléments pour lesquels : 'ChargedUserID = NumPoste' et 'CommunicationType = Outgoing'
       using (StreamWriter sw = new StreamWriter("C:\\Projet\\Facture_detail.txt", true)) //Ouverture en écriture du fichier ,si non existant creation du fichier FicheClient.
       {
        foreach (XElement el in elements)// Boucle sur les éléments retenus
        {
     
         lineMessage = String.Format("Date {0}, Heure {1}, Duree {2}, Numero.Appelle {3}, Prix {4}", el.Element("Date").Value, el.Element("Time").Value, el.Element("CallDuration").Value, el.Element("DialledNumber").Value, el.Element("Cost").Value);
         sw.WriteLine(lineMessage);
         counter++;//Compte le nombre de communication
         Prix = String.Format("{0}", el.Element("Cost").Value);
         Double.TryParse(Prix, out Cost);
         TotalCost += Cost;
        }
       }
       compteur = Convert.ToString(counter);
    Cordialement , Jérémy

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    tu mets ton fichier XML dans une structure d'accueil, ie : une classe en déserialisant ton fichier dedans...

    tu fais les suppressions dans la classe et ensuite, tu sérialises

    C'est le plus simple, le plus efficace, le plus robuste et le plus rapide à développer
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Jean ZAY - Jarny
    Inscrit en
    Juin 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Jean ZAY - Jarny
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 25
    Points : 14
    Points
    14
    Par défaut
    et on fait ça comment (je suis pas expert du tout en programmation...)

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    beh en lisant un cours sur C# ou en regardant l'aide sur la désérialisation.

    Il existe un outil, XSD, du framework .Net (donc installé sur ta machine si tu as l'environnement visual Studio, ou le framework .Net) qui crée à partir d'un fichier XML la classe C# (ou VB.NEt suivant les options choisies dans l'outil).

    Une fois que tu as cette classe, le code de désérialisation est évident (on trouve pleins d'exemples sur le net, y compris un tutoriel sur ce site )...

    Après, une fois que les données se retrouvent dans ta classe, il te suffit de gérer leur "éviction" en fonction de tes critères

    Et après, tu sérialises et basta...

    Franchement, je peux pas dire mieux.. ou alors, je te fais tout ton code et à ce moment là, t'as plus de problème
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 415
    Points : 486
    Points
    486
    Par défaut
    Il existe une méthode 'Remove()' (méthode de XNode, donc utilisable pour un XElement).

    Cette méthode permet de supprimer un noeud (ou donc un élément) de son parent.

    Partant du code que tu as déjà, c'est sans doute le plus simple :
    Tu n'a qu'à ajouter el.Remove();
    Et après ta boucle, tu sauvegardes le xdoc.

    A vérifier cependant (je n'ai pas testé), il se peut que tu n'aies pas le droit de faire la suppression pendant la boucle. Auquel cas, stocke tes éléments dans une liste pendant la boucle, et après la boucle applique le remove pour tous les éléments de la liste.


    Par contre, dans l'absolu, theMonz a sans doute raison : sa méthode permet de valider le fichier (si les tickets sont mal formés dans le fichier ça le dira tout de suite) et puis c'est une approche dans laquelle tu manipules des objets plutot qu'un flux xml... etc.

    Cela dit, pour les perf, dans tous les cas, il vaut mieux que tes fichiers ne soient pas énormes...

Discussions similaires

  1. [WD18] Supprimer des lignes dans un fichier xml
    Par cid5420 dans le forum WinDev
    Réponses: 26
    Dernier message: 10/04/2014, 10h04
  2. Réponses: 5
    Dernier message: 11/08/2008, 15h25
  3. [CSV] Ajouter et supprimer des ligne dans un fichier CSV
    Par gpsevasion dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2007, 17h00
  4. [VBA] Supprimer des lignes dans une table
    Par shadockgreg dans le forum Access
    Réponses: 6
    Dernier message: 22/11/2006, 09h58
  5. Réponses: 3
    Dernier message: 21/07/2006, 13h22

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