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

Windows Forms Discussion :

Parcourir un fichier XML et retourner ses elements


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 138
    Points : 37
    Points
    37
    Par défaut Parcourir un fichier XML et retourner ses elements
    Salut a tous.

    j'ai ce code xml


    Code xml : 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
    <P>
      <P1>
        <Operation>insertion</Operation>
        <PId>2869</PId>
     
          <Details>
               <champ>vendeur</champ>
          <encienneVal></encienneVal>
          <nouvelleVal>1</nouvelleVal>
          <champ>stok</champ>
              <encienneVal></encienneVal>
          <nouvelleVal>10</nouvelleVal>
     
        </Details>
      </P1>
     
    <P1>
        <Operation>mise a jour</Operation>
        <PId>2860</PId>
     
          <Details>
               <champ>vendeur</champ>
          <encienneVal>10</encienneVal>
          <nouvelleVal>3</nouvelleVal>
          <champ>stok</champ>
              <encienneVal>5</encienneVal>
          <nouvelleVal>40</nouvelleVal>
     
        </Details>
      </P1>
     
    </P>


    je veux recuperer pour chaque P1 l'Operation effectuée ensuite le idP et aussi les champs inserés ou modifiés.apparament ca marche, mais quand j'ai plusieurs balise <Champ> alors la la boucle s'arette avant de les recuperer je sais que c'est a cause "exit while" mais je sais pas quoi fairea la place, surtout que je suis pas doué pour ce qui est XML,XPATH...
    pour cela j'ai fais ceci:



    Code vb : 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
    Dim document As XPathDocument = New XPathDocument(XmlSource)
            Dim navigator As XPathNavigator = document.CreateNavigator()
            Dim nodesoperation As XPathNodeIterator = navigator.Select("/P/P1/Operation")
            Dim nodesId As XPathNodeIterator = navigator.Select("/P/P1/PId")
     
            Dim nodesNameFld As XPathNodeIterator = navigator.Select("/P/P1/Details/Champ")
            Dim nodesNewVal As XPathNodeIterator = navigator.Select("/P/P1/Details/NouvelleVal")
     
            Dim nodesOldVal As XPathNodeIterator = navigator.Select("/P/P1/Details/EncienneVal")
     
            While nodesoperation.MoveNext()
                MsgBox(nodesoperation.Current.Value)
     
                While nodesId.MoveNext()
                    MsgBox(nodesId.Current.Value)
                    Exit While
                End While
     
                While nodesNameFld.MoveNext()
                    MsgBox(nodesNameFld.Current.Value)
                    Exit While
                End While
     
                While nodesOldVal.MoveNext()
                    MsgBox(nodesOldVal.Current.Value)
                    Exit While
                End While
                While nodesNewVal.MoveNext()
                    MsgBox(nodesNewVal.Current.Value)
                    Exit While
                End While
     
            End While

    s'il ya des idées beaucoup mieux que la mienne n'hésitez surtout pas.

    Merci

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Avant tout chose, le XML c'est toi qui l'a fixé ou bien il t'est imposé ?

    Si rien n'est imposé, ce serait plus simple d'avoir des objets métier et d'effectuer une sérialisation / désérialisation XML.
    Pas de questions techniques par MP

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 138
    Points : 37
    Points
    37
    Par défaut
    il est imposé.

  4. #4
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Erf, c'est dommage car le XML n'est même pas bien structuré du point de vue logique des données :/

    Essaye avec ceci. Désolé car c'est du C#, mais le principe est là.
    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
    XPathDocument xpathDoc = new XPathDocument(XmlSource);
    XPathNavigator nav = xpathDoc.CreateNavigator();
     
    foreach (XPathNavigator operation in nav.Select("/P/P1"))
    {
        // Operation
        operation.MoveToFirstChild();
        string op = operation.Value;
        // PId
        operation.MoveToNext(XPathNodeType.Element);
        int id = operation.ValueAsInt;
     
        Console.WriteLine(string.Format("Opération {0} : Id = {1}", op, id));
     
        foreach (XPathNavigator champ in operation.Select("../Details/champ"))
        {
            // Nom du champ
            string ch = champ.Value;
            // AncienneValeur
            champ.MoveToNext("encienneVal", string.Empty);
            string ancienneValeur = champ.Value;
            // NouvelleValeur
            champ.MoveToNext("nouvelleVal", string.Empty);
            string nouvelleValeur = champ.Value;
     
            Console.WriteLine(string.Format("Champ {0} : AncienneValeur = {1} ; AncienneValeur = {2}", ch, ancienneValeur, nouvelleValeur));
        }
    Pas de questions techniques par MP

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 138
    Points : 37
    Points
    37
    Par défaut
    oui ca marche merci
    mais juste une remarque pour le XML j'ai autres elements que j'ai pas ecris dans ma queston pour ne pas etre long.

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     // Operation
        operation.MoveToFirstChild();

    comment je peux la modifier celon son emplacement
    c'est possible de donner un index?


    exemple :

    Code xml : 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
    <P>
      <P1>
    <baliz1>text</baliz1>
    <baliz2>text</baliz2>
        <Operation>insertion</Operation>
        <PId>2869</PId>
     
          <Details>
               <champ>vendeur</champ>
          <encienneVal></encienneVal>
          <nouvelleVal>1</nouvelleVal>
          <champ>stok</champ>
              <encienneVal></encienneVal>
          <nouvelleVal>10</nouvelleVal>
     
        </Details>
      </P1>

  6. #6
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Utilise la méthode MoveToChild(string, string) à la place de MoveToFirstChild.
    Pas de questions techniques par MP

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 138
    Points : 37
    Points
    37
    Par défaut
    oui voila ca marche la.Merci

    j'ai un souci
    je veux ecrire les données recupérées du fichier xml dans un fichier xml
    comme telle

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <P>
    <champ></champ>
    <nouvelleval></nouvelleval>
    </P>

    j'ai fais un bout de code mais ca marche juste si j'ai une seule balise champ
    or moi je peux en avoir plusieurs

    Code vb : 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
     Dim XmlDoc1 As Xml.XmlDocument = New Xml.XmlDocument()
            ' Création du document
            XmlDoc1.LoadXml("<P></P>")
     
       Dim N As Xml.XmlElement ' 
                        Dim Nch As Xml.XmlElement 
                        N = XmlDoc1.CreateElement("P1")
                        Nch = XmlDoc1.CreateElement(ch)
     
     
                        Nch.InnerText = nouvelleValeur
     
     
                        N.AppendChild(Nch)
     
     
                        XmlDoc1.DocumentElement.AppendChild(N)
     
     
                    XmlDoc1.Save(Application.StartupPath & "taj.xml"


    Merci

Discussions similaires

  1. parcourir un fichier xml
    Par vanesa dans le forum Langage
    Réponses: 2
    Dernier message: 06/03/2008, 15h48
  2. [XSLT]tester si le fichier xml ne contien aucun element
    Par volcano25 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 26/11/2007, 09h25
  3. Parcourir un fichier Xml
    Par Kiboumz dans le forum VB.NET
    Réponses: 2
    Dernier message: 13/07/2007, 18h08
  4. [C#] Comment parcourir un fichier Xml ?
    Par Sebsheep dans le forum C#
    Réponses: 4
    Dernier message: 08/09/2006, 23h20
  5. [débutant]Parcourir un fichier XML
    Par Wis dans le forum ASP
    Réponses: 2
    Dernier message: 26/09/2005, 10h04

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