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

VB.NET Discussion :

insertion de nouveaux elements dans un fichier xml


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Points : 15
    Points
    15
    Par défaut insertion de nouveaux elements dans un fichier xml
    Bonjour ;

    Pour commencer j'ai un document Xml existant que je parcours pour y insérer des elements voilà le doc :
    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
    <Prod_Description Prod_id="100002" Prod_nom="Créme de nuit">
    	<Langue Lang_id="1" Lang_nom="fr">
    		<Quantité_Désignation>Pot 5000ml  /Quantité_Désignation>
    		<Prod_indication>indication pour utiliser ce produit (Créme de nuit)</Prod_indication>
    		<Prod_contre_indication>Contre indications pour l-usage de ce produit</Prod_contre_indication>
    		<Prod_dietetique>dietetique produit BIO BIO BIO BIO </Prod_dietetique>
    		<Prod_composition>xAtome :10mg ; yAtome : 5mg ; ....</Prod_composition>
    		<Prod_conseil_utilisation>appliquer sur la peau du visage </Prod_conseil_utilisation>
    		<Prod_précautions>à ne pas laisser ce produit à la porté des enfants</Prod_précautions>
    		<Prod_fournisseur_principal>EPITACT</Prod_fournisseur_principal>
    	</Langue>
     
    	<Langue Lang_id="2" Lang_nom="eusa">
    		<Quantité_Désignation>Pot 50 ml</Quantité_Désignation>
    		<Prod_indication>product uses indication</Prod_indication>
    		<Prod_contre_indication>product use-s against indication</Prod_contre_indication>
    		<Prod_dietetique>dietetic product</Prod_dietetique>
    		<Prod_composition>xAtome :15mg ; yAtome : 15mg ; ....</Prod_composition>
    		<Prod_conseil_utilisation>To apply to the dry skin of face</Prod_conseil_utilisation>
    		<Prod_précautions>Not to let this product on childrens worn</Prod_précautions>
    		<Prod_fournisseur_principal>EPITACT</Prod_fournisseur_principal>
    	</Langue>
    </Prod_Description>
    En fait je veux insérer un element Style :
    <Style Bold = "0" Italic = "0"...> </Style> comme fils à tous les elements existants sauf Langue et la racine.

    Voilà ce que j'ai fait en vb.net:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each chn As XmlNode In elLgEng.ChildNodes
            styleEl.InnerText = chn.InnerText '' je récupère le text 
            chn.InnerText = Nothing ''j'enleve le text de l'element existant  ''comme Quantité_Désignation par exemple
            chn.AppendChild(styleEl)
            Console.WriteLine("**********************")
            Console.WriteLine(elLgEng.InnerXml)
     Next
    en bref je pensais le faire en 5 minutes mais peut être j'etais prétencieu
    car à l'execution il insére <style> juste dans le dernier element, et je comprends pas pourquoi.
    Merci beaucoup de votre aide

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Points : 15
    Points
    15
    Par défaut
    En fait pour être clair y'a pas tout le code y'a juste celui qui concerne le deuxieme element Langue (Anglais)
    vous supposez que le reste fonctionne pour le moment
    donc juste l'insertion Merci

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Points : 15
    Points
    15
    Par défaut
    tout le monde est en vacance sauf moi d'aprés ce que je vois,
    voilà je mets le code de ma methode;
    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
    Public Function createXmlDocWithStyle(ByVal prod_libellé As String) As XmlDocument
            Dim xmldocWithStyle As XmlDocument = getXmlDoc(prod_libellé)
            Dim styleEl As XmlElement = xmldocWithStyle.CreateElement("Style")
            styleEl.SetAttribute("Bold", 0)
            styleEl.SetAttribute("Italic", 0)
            styleEl.SetAttribute("Underline", 0)
            styleEl.SetAttribute("allign", "Left")
            styleEl.SetAttribute("bullet", 0)
            styleEl.SetAttribute("color", "black")
            Dim rootStyle As XmlElement = xmldocWithStyle.DocumentElement
            Dim elLgFr As XmlElement = rootStyle.SelectSingleNode("//Langue[@Lang_id ='1']")
            Dim elLgEng As XmlElement = rootStyle.SelectSingleNode("//Langue[@Lang_id ='2']")
            For Each no In elLgFr.ChildNodes
                styleEl.InnerText = no.innerText
                no.innerText = Nothing
                no.appendChild(styleEl)
                Console.WriteLine("***************************")
                Console.WriteLine(xmldocWithStyle.InnerXml)
            Next
            For Each no In elLgEng.ChildNodes
                styleEl.InnerText = no.innerText
                no.innerText = Nothing
                no.appendChild(styleEl)
                Console.WriteLine("***************************")
                Console.WriteLine(xmldocWithStyle.InnerXml)
            Next
            Console.WriteLine(xmldocWithStyle.InnerXml)
            'Dim xmldocWithStyle As XmlDocument = New XmlDocument
            'Dim xmlNormal As XmlDocument = getXmlDoc(prod_libellé)
            'xmldocWithStyle = xmlNormal.Clone
            'Dim styleEl As XmlElement = xmldocWithStyle.CreateElement("Style")
            'styleEl.SetAttribute("Bold", 0)
            'styleEl.SetAttribute("Italic", 0)
            'styleEl.SetAttribute("Underline", 0)
            'styleEl.SetAttribute("allign", "Left")
            'styleEl.SetAttribute("bullet", 0)
            'styleEl.SetAttribute("color", "black")
            'Dim rootStyle As XmlElement = xmldocWithStyle.DocumentElement
            'Dim rootN As XmlElement = xmlNormal.DocumentElement
            'Dim elLgFrN As XmlElement = rootN.SelectSingleNode("//Langue[@Lang_id ='1']")
            'Dim elLgEngN As XmlElement = rootN.SelectSingleNode("//Langue[@Lang_id ='2']")
            'Dim elLgFr As XmlElement = rootStyle.SelectSingleNode("//Langue[@Lang_id ='1']")
            'Dim elLgEng As XmlElement = rootStyle.SelectSingleNode("//Langue[@Lang_id ='2']")
            'elLgFr.RemoveAll()
            'elLgEng.RemoveAll()
            'elLgFr.SetAttribute("Lang_id", 1)
            'elLgFr.SetAttribute("Lang_nom", "fr")
            'elLgEng.SetAttribute("Lang_id", 2)
            'elLgEng.SetAttribute("Lang_nom", "eusa")
            'Console.WriteLine("******************************")
            'Console.WriteLine(xmldocWithStyle.InnerXml)
     
            'For Each no As XmlNode In elLgFrN.ChildNodes
            '    styleEl.InnerText = no.InnerText
            '    no.InnerText = Nothing
            '    Dim nodecloned As XmlElement = xmldocWithStyle.CreateElement(no.Name)
            '    nodecloned.AppendChild(styleEl)
            '    elLgFr.AppendChild(nodecloned)
            'Next
            'For Each no As XmlNode In elLgEngN.ChildNodes
            '    styleEl.InnerText = no.InnerText
            '    no.InnerText = Nothing
            '    Dim nodecloned As XmlElement = xmldocWithStyle.CreateElement(no.Name)
            '    nodecloned.AppendChild(styleEl)
            '    elLgEng.AppendChild(nodecloned)
            'Next
            'Console.WriteLine("******************************")
            'Console.WriteLine(xmldocWithStyle.InnerXml)
     
     
     
            Return xmldocWithStyle
        End Function
    vous voyez que j'ai mis en commentaire le reste car ça marcha pas aussi
    et voilà le resultat de tout ça

    <Prod_Description Prod_id="100002" Prod_nom="Créme de nuit">
    <Langue Lang_id="1" Lang_nom="fr">
    <Quantité_Désignation></Quantité_Désignation>
    <Prod_indication></Prod_indication>
    <Prod_contre_indication></Prod_contre_indication>
    <Prod_dietetique></Prod_dietetique>
    <Prod_composition></Prod_composition>
    <Prod_conseil_utilisation></Prod_conseil_utilisation>
    <Prod_précautions></Prod_précautions>
    <Prod_fournisseur_principal></Prod_fournisseur_principal>
    </Langue>
    <Langue Lang_id="2" Lang_nom="eusa">
    <Quantité_Désignation></Quantité_Désignation>
    <Prod_indication></Prod_indication>
    <Prod_contre_indication></Prod_contre_indication>
    <Prod_dietetique></Prod_dietetique>
    <Prod_composition></Prod_composition>
    <Prod_conseil_utilisation></Prod_conseil_utilisation>
    <Prod_précautions></Prod_précautions>
    <Prod_fournisseur_principal>
    <Style Bold="0" Italic="0" Underline="0" allign="Left" bullet="0" color="black">EPITACT</Style></Prod_fournisseur_principal>
    </Langue>
    </Prod_Description>
    vous remarquerez que l'insertion est faite mais pour le dernier element seulement je comprends pas pourquoi

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Points : 15
    Points
    15
    Par défaut
    Bonjour à tout le monde et "mille Merci" pour vos réponses si nombreuses.
    en fait le problème etait dans la définition de l'element Style en dehors de la boucle for each
    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
        Public Function createXmlDocWithStyle(ByVal prod_libellé As String) As XmlDocument
            Dim xmldocWithStyle As XmlDocument = getXmlDoc(prod_libellé)
     
            Dim rootStyle As XmlElement = xmldocWithStyle.DocumentElement
            Dim elLgFr As XmlElement = rootStyle.SelectSingleNode("//Langue[@Lang_id ='1']")
            Dim elLgEng As XmlElement = rootStyle.SelectSingleNode("//Langue[@Lang_id ='2']")
            For Each no As XmlNode In elLgFr.ChildNodes
                Dim styleEl As XmlElement = xmldocWithStyle.CreateElement("Style")
                styleEl.SetAttribute("Bold", 0)
                styleEl.SetAttribute("Italic", 0)
                styleEl.SetAttribute("Underline", 0)
                styleEl.SetAttribute("allign", "Left")
                styleEl.SetAttribute("bullet", 0)
                styleEl.SetAttribute("color", "black")
                styleEl.InnerText = no.InnerText
                no.ReplaceChild(styleEl, no.FirstChild)
                Console.WriteLine("***************************")
                Console.WriteLine(xmldocWithStyle.InnerXml)
                xmldocWithStyle.Save(Console.Out)
            Next
            For Each no As XmlNode In elLgEng.ChildNodes
                Dim styleEl As XmlElement = xmldocWithStyle.CreateElement("Style")
                styleEl.SetAttribute("Bold", 0)
                styleEl.SetAttribute("Italic", 0)
                styleEl.SetAttribute("Underline", 0)
                styleEl.SetAttribute("allign", "Left")
                styleEl.SetAttribute("bullet", 0)
                styleEl.SetAttribute("color", "black")
                styleEl.InnerText = no.InnerText
                no.ReplaceChild(styleEl, no.FirstChild)
                Console.WriteLine("***************************")
                Console.WriteLine(xmldocWithStyle.InnerXml)
            Next
            Console.WriteLine(xmldocWithStyle.InnerXml)
    et ça marche la comme ça il ne fait pas que déplacer l'element dans le fichier xml

  5. #5
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Points : 4 913
    Points
    4 913
    Par défaut
    Bah à midi on mange
    Merci d'utiliser en cas de résolution de votre problème

    N'oubliez pas non plus le petit pouce vert pour récompenser celui que vous a aidé

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

Discussions similaires

  1. [JDOM] Copie et suppresion d'un element dans un fichier xml
    Par riderfun dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 24/03/2009, 10h59
  2. [XSD] insertion d'un schema dans un fichier xml
    Par legide dans le forum Valider
    Réponses: 1
    Dernier message: 28/10/2008, 07h51
  3. Ajout d'un element dans un fichier XML
    Par vacknov dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/08/2007, 10h26
  4. [C# 2.0] Inserer un element dans un fichier Xml
    Par Khrysby dans le forum Windows Forms
    Réponses: 3
    Dernier message: 12/09/2006, 17h05
  5. Réponses: 3
    Dernier message: 29/06/2006, 16h54

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