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

XML/XSL et SOAP Discussion :

Comment lire un fichier XML et l'écrire dans une variable XML en C#


Sujet :

XML/XSL et SOAP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 25
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 29
    Points : 28
    Points
    28
    Par défaut Comment lire un fichier XML et l'écrire dans une variable XML en C#
    Bonjour à tous et Bonne Année 2009 en retard.

    Voilà, j'ai un petit soucis avec mon code.

    J'explique à fond.


    J'ai créer grâce à XML Notepad un Xml. Et ensuite je le lis sur mon application en C# dans mon load de l'interface. Voici le code pour loader :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private void Form1_Load(object sender, EventArgs e)
            {
                System.Xml.XmlDocument xDoc = new System.Xml.XmlDocument();
                xDoc.Load("test.xml");
                XmlElement root = xDoc.DocumentElement;
     
                foreach (System.Xml.XmlNode Node in root.SelectNodes("//Jobs"))
                {
                    toto(Node);
                }
            }

    Voici mon code pour la fonction toto.

    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    private void toto(System.Xml.XmlNode mynode)
            {
    
                System.Xml.XmlNode nodeparent = mynode.ParentNode;
                
                System.Xml.XmlAttribute attr;
                int flagPrincipal;
                
    
    
                if (mynode.NodeType == XmlNodeType.Element) //Essaye de voir si le noeud est un Element ou une valeur
                {
                    if (nodeparent.ParentNode == null)//Test si c'est le noeud principal
                    {
                        flagPrincipal = 1;
                        myNodenew = XMLDocnew.CreateElement(mynode.Name);
                        flagelement = 0;
                    }
                    else //Test si ce n'est pas le noeud principal
                    {
                        flagPrincipal = 0;
    
                        if (flagelement == 1)
                        {
                            myNodecurrentnew = myNodecurrentnew.AppendChild(elemnew);
                            flagelement = 0;
                        }
    
                        elemnew = XMLDocnew.CreateElement(mynode.Name);
                        flagelement = 1;
    
                        try //Si il y a une erreur ou non ou si il y a des attributs ou si il n'y en a pas
                        {
                            foreach (System.Xml.XmlAttribute Attributs in mynode.Attributes)// Recherche un attribut si il y en a dans le noeud
                            {
                                attr = XMLDocnew.CreateAttribute(Attributs.Name);
                                attr.Value = Attributs.Value;
                                elemnew.SetAttributeNode(attr);
                                // Va afficher tous les attributs et leurs valeurs et concaténer à la variable globale ou principale
                            }
                        }
                        catch
                        {
                        }
                    }
    
                    if (mynode.HasChildNodes)// Test si le noeud mynode a un ou des fils
                    {
                        switch (flagPrincipal) 
                        {
                            case 1:
                                myNodecurrentnew = XMLDocnew.AppendChild(myNodenew);
                                flagelement = 0;
                                break;
                        }
    
                        foreach (System.Xml.XmlNode fils in mynode.ChildNodes)// Recherche un attribut si il y en a dans le noeud
                        {
    
    //là j'essaie de récupérer le noeud parent. mais je n'y arrive pas
                            if (flagPrincipal != 1)
                            {
                                myNodecurrentnew = myNodecurrentnew.ParentNode.SelectSingleNode(myNodecurrentnew.ParentNode.Name)   ;
                            }                         toto(fils);
                        }
                    }
                    else 
                    {
                        myNodecurrentnew.AppendChild(elemnew);
                        flagelement = 0;
                    }
                }
                else // Test si c'est une valeur et non un élément
                {
    
                    elemnew.InnerText = "Jean Claude";
                    myNodecurrentnew.AppendChild(elemnew);
                    flagelement = 0;
                }
            
            }
    Donc, en fait la fonction vérifie et décortique le xml loader. Et le problème c'est que cela fonction bien mais il y a une erreur au niveau du 3éme noeud.

    Voici le XML normalement :

    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
     
    <JOBS>
        <JOB>
            <File>
                 <Name>Jean Claude</Name>
                 <Error>Oui</Error>
                 <Occur/>
            </File>
            <File>
                  <Name>Jean Claude</Name>
                 <Error>Non</Error>
                 <Occur/>
            </File>
        </JOB>
    </JOBS>
    Et au niveau du File, et bien, cela décale sur la droite et le 2éme File et au même niveau que <name> etc....

    Je sais pourquoi, ça mon code ne permet pas de remonter au noeud parent.
    Mais plus d'idée. C'est pour cela que je demande votre aide.

    J'ai réussi à le faire sous une autre méthode, la méthode des xmlWriter, mais je voudrais le faire avec une variable xml que je garde, alors que le xmlWriter enregistre tout de suite dans le fichier.

    Voici le code de la méthode xmlWriter :

    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
     
    private void createxmlnew(System.Xml.XmlNode mynode, System.Xml.XmlWriter xmlWriter)
            {
                if (mynode.NodeType == XmlNodeType.Element) //Essaye de voir si le noeud est un Element ou une valeur
                {
                    xmlWriter.WriteStartElement(mynode.Name );             
                    try //Si il y a une erreur ou non
                    {
                        foreach (System.Xml.XmlAttribute Attributs in mynode.Attributes)// Recherche un attribut si il y en a dans le noeud
                        {
                            xmlWriter.WriteStartAttribute(Attributs.Name);
                            xmlWriter.WriteString(Attributs.Value);
                            xmlWriter.WriteEndAttribute();
                            // Va afficher tous les attributs et leurs valeurs et concaténer à la variable globale ou principale
                        }
                    }
                    catch
                    {
                    }
                    if (mynode.HasChildNodes) // Recherche si le noeud a des fils ou enfants
                    {           
                        foreach (System.Xml.XmlNode Val in mynode.ChildNodes)
                        {
                            createxmlnew(Val, xmlWriter);
                        }
                    }
                    xmlWriter.WriteEndElement();
                }
                else
                {
                    xmlWriter.WriteString(mynode.Value);    
                } 
            }

    Est ce vous pouvez m'aider svp ???

    Merci d'avance

    Bonne Année

  2. #2
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Avez-vous déjà regardé du côté de la propriété .OuterXml ?
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 25
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 29
    Points : 28
    Points
    28
    Par défaut Merci
    Je ne connais pas cette fonction, je vais regarder merci beaucoup.

    Bonne Année

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 25
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 29
    Points : 28
    Points
    28
    Par défaut
    Bonjour,


    Avez-vous déjà regardé du côté de la propriété .OuterXml ?
    __________________
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/


    J'ai cherché comme un fou cette fonction, et manque de bol, j'ai compris ce qu'elle voulait dire mais je sais pas l'intégrer dans mon algo.

    Est ce que vous pouvez m'aider svp ?

    Merci d'avance.

    Bonne Année

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/07/2010, 14h39
  2. [Batch] lire dans un fichier et mettre le résultat dans une variable
    Par danydan01 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 09/06/2010, 12h28
  3. Réponses: 0
    Dernier message: 16/01/2009, 15h15
  4. Réponses: 5
    Dernier message: 21/02/2007, 16h12
  5. Lire un fichier Texte d'1 bloc dans une chaine
    Par User dans le forum Langage
    Réponses: 6
    Dernier message: 13/09/2006, 21h56

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