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 :

Somme de Noeud XML [Débutant]


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 63
    Par défaut Somme de Noeud XML
    Bonjour
    J'ai du mal à faire la somme de plusieurs nœud ayant le même nom dans un même fichier XML et j'essaye d'écrire ma variable dans un fichier texte pour contrôler la valeur mais ça ne marche pas non plus.
    Je précise que je suis un gros débutant (5 jours d'auto-apprentissage) soyez indulgent merci.
    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
    private long income = 0;
    .
    .
    .
                string tlist = "http://monurlxml";
                XmlDocument list1 = new XmlDocument();
                list1.Load(tlist);
                XmlNodeList elementsByTagName = list1.DocumentElement.GetElementsByTagName("MonNoeud");
                for (int i = 0; i < elementsByTagName.Count; i++)
                {
                    income = income + Convert.ToInt64(elementsByTagName[i].InnerXml.ToString());                
     
                    StreamWriter writer;
                    string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName);
                    string Tincome = directoryName + @"\settings\Tincome.txt";
                    if (!System.IO.File.Exists(Tincome))
                    {
                        using (writer = System.IO.File.CreateText(Tincome))
                        {
                        }
                        using (StreamWriter writer2 = new StreamWriter(Tincome))
                        {
                            writer2.Write(income);
                        }
                    }
                }
    Donc ce que j'essaye de faire c'est compter le nombre de noeud s'appellant "MonNoeud" pour faire une boucle égale à ce nombre qui incrémente une variable "income" des valeurs comprise dans chaque <MonNoeud></MonNoeud>
    L'écriture de income dans un fichier texte c'est juste pour vérifier que la somme fonctionne, je l'enlèverai apres.

    ex:
    <xml>
    <MonNoeud>10</MonNoeud>
    <MonNoeud>5</MonNoeud>
    <MonNoeud>6</MonNoeud>
    <MonNoeud>2</MonNoeud>
    <MonNoeud>8</MonNoeud>
    <MonNoeud>3</MonNoeud>
    </xml>

    income = 34

    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Quelle version de VS utilises-tu ? Si c'est 2008 ou plus récent, le plus simple est d'utiliser Linq to XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string tlist = "http://monurlxml";
    var doc = XDocument.Load(tlist);
    long income = doc.Root.Elements("MonNoeud").Sum(e => (long)e);
    Ca suppose que la structure du document soit bien celle que tu as indiquée, avec <MonNoeud> directement dans <xml>... si ce n'est pas le cas, par exemple si les éléments <MonNoeud> sont dans <xml>/<titi>/<tata>, il faut faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    long income = doc.Root.Elements("titi").Elements("tata").Elements("MonNoeud").Sum(e => (long)e);

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 63
    Par défaut
    Merci je vais tester ça quand... j'aurais trouvé qu'es j'ai fait lol y a plus rien qui marche...
    donc c'est VS 2010
    Et si il y a plusieurs tata ?
    titi
    -tata/monnoeud
    -tata/monnoeud
    -tata/monnoeud
    titi
    la somme marche aussi ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par vladvonjim Voir le message
    Et si il y a plusieurs tata ?
    titi
    -tata/monnoeud
    -tata/monnoeud
    -tata/monnoeud
    titi
    la somme marche aussi ?
    Oui

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 60
    Par défaut
    Sympa !+1 on peut aussi voir coté Xpath
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    using System.Xml; 
    using System.Xml.XPath; 
     
    string fileName = "data.xml"; 
    XPathDocument doc = new XPathDocument(fileName); 
    XPathNavigator nav = doc.CreateNavigator();  
    int nodeCount = int.parse(nav.Evaluate("count(/catalog/cd/price)"));

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 63
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string monxml = "http://blablamon.xml";
    var doc = XDocument.Load(monxml);
    long masomme = doc.Root.Elements("outer").Elements("xml").Elements("noeud1").Elements("noeud2").Elements("noeud3").Sum(a => (long)a);
    Donc en gros ça donne ça.
    Lé début marche c'est sur, si j'écris "doc" dans un fichier texte j'ai bien tout mon XML
    Par contre si j'écris "masomme" j'ai 0 alors que j'ai un de mes "noeud3" qui a 560 en valeur.
    Il n'y a qu'un "outer", qu'un "xml", qu'un "noeud1" mais plusieurs "noeud2" contenant chacun un "noeud3" et je veux donc la somme de ces "noeud3" qui me servira si elle est > 0 à continuer mon programme.

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 63
    Par défaut
    C'est bon j'ai viré le Root puisque mon Root c'était "outer"... ou alors je vire Elements("outer") ça doit marcher aussi.

    Merci !

    pour la méthode xpath de Robotech j'ai pas réussi...

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par vladvonjim Voir le message
    C'est bon j'ai viré le Root puisque mon Root c'était "outer"... ou alors je vire Elements("outer") ça doit marcher aussi.
    Oui, perso je préfère virer Elements("outer"). Un document XML valide a toujours un élément racine donc en partant de là tu sais clairement où tu es

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

Discussions similaires

  1. [Ajout noeud xml] comment ça marche?
    Par noobiewan kenobi dans le forum Format d'échange (XML, JSON...)
    Réponses: 37
    Dernier message: 19/07/2007, 22h46
  2. [FLASH 8] Sélection noeud xml
    Par bractar dans le forum Flash
    Réponses: 4
    Dernier message: 11/01/2006, 11h17
  3. [msxml]noeuds XML: Entity Reference
    Par ep31 dans le forum Valider
    Réponses: 4
    Dernier message: 04/11/2005, 17h24
  4. Réponses: 3
    Dernier message: 01/04/2005, 09h37
  5. XSL ne parvient pas à lire les noeuds XML ??
    Par yahn dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 27/06/2004, 19h29

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