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 :

[XML/XPath] récupérer des noeud enfant en nombre variable


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 136
    Par défaut [XML/XPath] récupérer des noeud enfant en nombre variable
    Salut a tous,

    j'ai crée une application WinForm. elle permet de déclencher des macro (iMacros) et parse les script des macro pour y modifier cetaines informations (login et mot de passe entre autre).
    j'ai un fichier XML nommé macros.xml qui contient les paramètres de mes macros.

    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
    <?xml version="1.0" encoding="utf-8"?>
    <macros>
      <MaxID>7</MaxID>
      <macro ID="1">
        <label>Orange Mobile</label>
        <macroName>orange_mobile.iim</macroName>
        <loops>12</loops>
        <login>*****</login>
        <password>*****</password>
        <downloadFolder>C:\Users\nightcyborg\Desktop</downloadFolder>
      </macro>
      <macro ID="2">
        <label>orange mobile 2</label>
        <macroName>orange_mobile_2.iim</macroName>
        <loops>12</loops>
        <login>*****</login>
        <password>*****</password>
        <downloadFolder>C:\Users\nightcyborg\Desktop</downloadFolder>
      </macro>
      <macro ID="3">
        <label>bouygues</label>
        <macroName>bouygues.iim</macroName>
        <loops>3</loops>
        <login>*****</login>
        <password>*****</password>
        <downloadFolder>C:\Users\nightcyborg\Desktop</downloadFolder>
      </macro>
      <macro ID="4">
        <label>orange mobile 3</label>
        <macroName>orange mobile 3.iim</macroName>
        <loops>12</loops>
        <login>*****</login>
        <password>*****</password>
        <downloadFolder>C:\Users\nightcyborg\Desktop</downloadFolder>
      </macro>
      <macro ID="5">
        <label>sfr mobile</label>
        <macroName>sfr mobile 2010.iim</macroName>
        <loops>1</loops>
        <login>*****</login>
        <password>*****</password>
        <downloadFolder>C:\Users\nightcyborg\Desktop</downloadFolder>
      </macro>
      <macro ID="6">
        <label>SFR Mobile test 01</label>
        <macroName>SFR mobile Test 02.iim</macroName>
        <loops>1</loops>
        <login>*****</login>
        <password>*****</password>
        <downloadFolder>C:\Users\nightcyborg\Desktop</downloadFolder>
      </macro>
      <macro ID="7">
        <label>sfr</label>
        <macroName>SFR.iim</macroName>
        <loops>1</loops>
        <login>*****</login>
        <password>*****</password>
        <downloadFolder>C:\Users\nightcyborg\Desktop</downloadFolder>
      </macro>
    </macros>
    ce fichier là je le manipule sans problèmes (ajout, suppressions, recherches, etc...).
    mais mon applicatio doit être capable d'executer ces macros à un moment précis planifié par l'utilisateur. les informations concernant ces planification sont contenues dans le fichier events.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
    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
    <?xml version="1.0" encoding="utf-8" ?>
    <events>
    	<maxId>1</maxId>
      <event ID="0">
        <nbMacros>2</nbMacros>
        <label>eventTest1</label>
        <dateEvent>03/03/2010 16:17:20</dateEvent>
        <macros>
          <macro ID="2">
            <label>orange mobile 2</label>
            <macroName>orange_mobile_2.iim</macroName>
            <loops>12</loops>
            <login>*****</login>
            <password>*****</password>
            <downloadFolder>C:\Users\nightcyborg\Desktop</downloadFolder>
          </macro>
          <macro ID="3">
            <label>bouygues</label>
            <macroName>bouygues.iim</macroName>
            <loops>3</loops>
            <login>*****</login>
            <password>*****</password>
            <downloadFolder>C:\Users\nightcyborg\Desktop</downloadFolder>
          </macro>
        </macros>
      </event>
      <event ID="2">
        <nbMacros>3</nbMacros>
        <label>eventTest2</label>
        <dateEvent>04/03/2010 15:03:20</dateEvent>
        <macros>
    	 <macro ID="4">
    	  <label>orange mobile 3</label>
    	  <macroName>orange mobile 3.iim</macroName>
    	  <loops>12</loops>
    	  <login>*****</login>
    	  <password>*****</password>
    	  <downloadFolder>C:\Users\nightcyborg\Desktop</downloadFolder>
         </macro>
    	 <macro ID="3">
    	  <label>bouygues</label>
    	  <macroName>bouygues.iim</macroName>
    	  <loops>3</loops>
    	  <login>*****</login>
    	  <password>*****</password>
    	  <downloadFolder>C:\Users\nightcyborg\Desktop</downloadFolder>
    	 </macro>
         <macro ID="6">
    	  <label>SFR Mobile test 01</label>
    	  <macroName>SFR mobile Test 02.iim</macroName>
    	  <loops>1</loops>
    	  <login>*****</login>
    	  <password>*****</password>
    	  <downloadFolder>C:\Users\nightcyborg\Desktop</downloadFolder>
    	 </macro>
        </macros>
      </event>
    </events>
    comme vous pouvez le voir, je stock dans chaque événement les paramètres des macros à exécuter au moment choisi. le nombre de macros est donc variable.
    j'ai crée une class Event, celle-ci stock les macros dans un list de type Macro (que j'ai crée également).

    quand je récupére les Event je voudrai récupérer aussi les macros associées, mais je n'y parviens pas.

    voici ma méthode permettant de retourner la list des Event :
    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
    public static List<Event> listAllEvents()
            {
                Event mEvent;
                XPathDocument xDoc = new XPathDocument("event.xml");
                XPathNavigator xNav, xNav2;
                XPathNodeIterator xNodes, xNodes2;
     
                xNav = xDoc.CreateNavigator();
                expr = "//event";
                xNodes = xNav.Select(xNav.Compile(expr));
     
                if (xNodes.Count != 0)
                {
                    lEvents = new List<Event>();
                    while (xNodes.MoveNext())
                    {
                        string txt = "";
                        mEvent = new Event();
                        txt += "\r\n" + xNodes.Current.GetAttribute("ID", "");
                        mEvent.ID = int.Parse(xNodes.Current.GetAttribute("ID", ""));
                        xNodes.Current.MoveToFirstChild();
                        txt += "\r\n" + xNodes.Current.Value;
                        int nbm = int.Parse(xNodes.Current.Value);
                        xNodes.Current.MoveToNext();
                        txt += "\r\n" + xNodes.Current.Value;
                        mEvent.label = xNodes.Current.Value;
                        xNodes.Current.MoveToNext();
                        txt += "\r\n" + xNodes.Current.Value;
                        mEvent.dateEvent = DateTime.Parse(xNodes.Current.Value);
                        xNodes.Current.MoveToNext();
                        int tr = nbm;
                        Macro macro = new Macro();
     
                        while (tr > 0)
                        {
     
                            xNodes.Current.MoveToFirstChild();
                            txt += "\r\n\r\n\r\n" + xNodes.Current.GetAttribute("ID", "");
                            xNodes.Current.MoveToFirstChild();
                            txt += "\r\n" + xNodes.Current.Value;
                            xNodes.Current.MoveToNext();
                            txt += "\r\n" + xNodes.Current.Value;
                            xNodes.Current.MoveToNext();
                            txt += "\r\n" + xNodes.Current.Value;
                            xNodes.Current.MoveToNext();
                            txt += "\r\n" + xNodes.Current.Value;
                            xNodes.Current.MoveToNext();
                            txt += "\r\n" + xNodes.Current.Value;
                            tr--;
                            xNodes.Current.MoveToParent();
                            xNodes.Current.MoveToNext();
                        }
                        lEvents.Add(mEvent);
     
                        mEvent = null;
     
                    }
     
     
                }
                else
                {
                    return null;
                }
     
                return lEvents;
            }
    merci de m'avoir lu, j'espère que vous pourrez m'aider.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 136
    Par défaut
    bon, j'ai fait autrement, j'ai simplement stocké les ID des macros liées à l'évennemtn dans l'élément <macros> en les séparant par des virgules, suffit de faire un split aprés.

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

Discussions similaires

  1. [Débutant] Ajouter des noeuds enfant dans un noeud (XML)
    Par dad72 dans le forum C#
    Réponses: 1
    Dernier message: 28/10/2011, 23h44
  2. XPATH > une boucle sur des noeuds enfants ?
    Par mastronic dans le forum Débuter
    Réponses: 6
    Dernier message: 09/10/2009, 16h03
  3. lire un fichier XML avec des noeuds, enfants, etc
    Par thor76160 dans le forum C#
    Réponses: 23
    Dernier message: 04/09/2009, 15h14
  4. [C#-XML] Récupérer les valeurs des noeuds enfants
    Par cyllix dans le forum Windows Forms
    Réponses: 1
    Dernier message: 23/06/2006, 11h54
  5. [XML] Parser selon des noeuds enfants
    Par GLDavid dans le forum Modules
    Réponses: 5
    Dernier message: 20/08/2004, 20h42

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